视图函数的作用是生成请求的响应,但是直接在视图函数里处理业务逻辑和表现逻辑,会显的代码混乱。
可以把表现逻辑移到模板中。
模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用一个名为Jinja2的强大模板引擎
Flask使用jinja2模板引擎来渲染html页面。
1.需要 import render_template
2.在视图函数中调用 render_template,这个函数的第一个参数是模板文件名,其他参数为键值对。表示将值或者变量,传递给左侧模板中的变量。
如
@app.route('/')
def index():
return render_template('index.html', name='tom', age=10)
变量
模板中使用{{name}}结构表示一个变量,这是一种特殊的占位符,告诉模板引擎这个值从渲染模板的数据中获取。
jinja2 模板文件混合 html 语法与 jinja2 语法,使用分界符区分 html 语法与 jinja2 语法。有 5 种常见的分界符:
- {{ 变量 }},将变量放置在 {{ 和 }} 之间;
- {% 语句 %},将语句放置在 {% 和 %} 之间;
- {# 注释 #},将注释放置在 {# 和 #} 之间;
- ## 注释,将注释放置在 # 之后
- 使用 {{ var }} 包围的标识符称为变量,模板渲染会将其替换为 Python 中的变量
<html>
{{ string }}
<ul>
<li> {{ list[0] }}
<li> {{ list[1] }}
<li> {{ list[2] }}
<li> {{ list[3] }}
</ul>
<ul>
<li> {{ dict['name'] }}
<li> {{ dict['age'] }}
</ul>
</html>
jinja2能是识别所有类型的变量,如:字符串、列表、字典,它们会被替换为同名的 Python 变量
from flask import Flask, render_template
app = Flask(__name__)
string = 'www.imooc.com'
list = ['www', 123, (1, 2, 3), {"name": "poloyy"}]
dict = {'name': 'zhangsan', 'age': True}
@app.route('/2')
def index2():
return render_template('index2.html', string=string, list=list, dict=dict)
app.run(debug=True)
过滤器
变量的值可以使用过滤器修改。过滤器添加在变量名之后,二者之间以竖线分隔
如{{name | lower}}表示,将name表里的值都小写
控制结构
jinjia2提供了多种控制结构,可以改变模板的渲染流程。
用 {% 语句 %} 包围的语法块称为语句,jinja2 支持类似于 Python 的 if-else 判断语句
{% if cond %}
{% elif cond %}
{% else %}
{% endif %} 在模板中使用条件判断语句
jinja2 模板中,使用 {% 语句 %} 包围的语法块称为语句,jinja2 支持类似于 Python 的 for 循环语句
{% for item in iterable %}
{% endfor %}在模板中渲染一组元素,使用for循环
Jinja2还支持宏。宏类似于Python代码中的函数。
jinjia2还支持模板集成,类似于Python中的类。创建基模板和衍生模板。基模板包括区块,在衍生模板中重新定义区块。
参考:
Flask(8)- jinja2 模板入门 - 小菠萝测试笔记 - 博客园