上期我们用Flask写了一个小玩意,但那个有些太寒酸了,这次我们让网页能动!
一、Jinja2模板引擎了解(懒得看的可以不看)
模板
在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容。
-
模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取
-
使用真实值替换变量,再返回最终得到的字符串,这个过程称为“渲染”
-
Flask是使用 Jinja2 这个模板引擎来渲染模板
使用模板的好处: -
视图函数只负责业务逻辑和数据处理(业务逻辑方面)
-
而模板则取到视图函数的数据结果进行展示(视图展示方面)
-
代码结构清晰,耦合度低
Jinja2
两个概念:
- Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
- 模板语言:是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。
渲染模版函数
- Flask提供的 render_template 函数封装了该模板引擎
- render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
二、暴力学习Jinja2模板(声明:jinja2是用在HTML里面的)
注释
{# 我是注释 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{# 我是注释 #}
</body>
</html>
变量代码块(从python中传入,可被显示在网页)
{{ name }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ name }}
</body>
</html>
控制代码块(判断和循环语句,不多BB,看看就行)
{% if user %}
{{ user }}
{% else %}
hello!
{% for index in indexs %}
{{ index }}
{% endfor %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if user %}
{{ user }}
{% else %}
hello!
{% for index in indexs %}
{{ index }}
{% endfor %}
</body>
</html>
过滤器
变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。
{{ 'abc' | captialize }}
# Abc
{{ 'abc' | upper }}
# ABC
{{ 'hello world' | title }}
# Hello World
# 过滤器可以链式使用
{{ "hello world" | replace('world','daxin') | upper }}
# HELLO DAXIN
{{ 18.18 | round | int }}
# 18
我将过滤器汇总了一下
名字 | 功能 |
---|---|
safe | 渲染时值不转义 |
capitialize | 把值的首字母转换成大写,其他子母转换为小写 |
lower | 把值转换成小写形式 |
upper | 把值转换成大写形式 |
title | 把值中每个单词的首字母都转换成大写 |
trim | 把值的首尾空格去掉 |
striptags | 渲染之前把值中所有的HTML标签都删掉 |
join | 拼接多个值为字符串 |
replace | 替换字符串的值 |
round | 默认对数字进行四舍五入,也可以用参数进行控制 |
int | 把值转换成整型 |
演示
from flask import Flask,render_template
app = Flask(__name__)
@app.route("/")
def index():
names=["李雷","思远","彦林","辉辉","天骄"]
strs="abcde"
#第一个names是传入html用于接受的名字,第二个是python里变量的名字
return render_template("index.html",names=names,strs=strs)
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for name in names %}
{% if name=="天骄" %}
My love is {{ name }}!<br>
{% else %}
My friend is {{ name }}! <br>
{% endif %}
{% endfor %}
{{ strs }}的大写是{{ strs | upper }}
</body>
</html>
运行结果:
今天就简单讲一下Jinja2语法,我觉得应该蛮容易理解的,明天再更后面的内容!