一、模板基本用法
-
创建模板
Jinja2里3种常用的界定符
语句 {%…%},如if判断,for循环等
表达式 {{…}},如字符串,变量,函数调用等
注释 {#…#}
-
模板语法
以{%…%}为开头进行控制的输出后,需要在语句结束的地方加上{%end控制符%}作为结束标签
-
渲染模板
用Flask的render_template()函数来渲染模板,第一个参数为/templates下的文件名,后面的参数是模板内需要渲染的参数,左边为形参,右边为实参,若需要传入函数时,则只需传函数名即可
二、模板辅助工具
使用set标签 {%set…%} 在模板中定义变量,使用{%set…%} 和 {%endset%}定义一组变量
-
上下文
使用Flask内置的4种上下文方法(config,request,session,g),或者使用app.context_processor作为装饰器或者方法自定义上下文全局变量,这样可以在标记了自定义上下文位置的地方直接返回变量值,无需再传入
-
全局对象
在所有模板里均可以调用的对象。
内置的模板全局函数有Jinja2里的range(),lipsum(),dict(),以及Flask里的url_for()和app.template_global()。上下文方法注册的函数也可作为全局对象使用
-
过滤器
使用管道"|"作为过滤器的表示,右边的函数会作用于左边的变量或者字符串,可以嵌套使用。另一种使用方法为,使用 {%filter 过滤器%} 和 {%endfilter%} 作为开始和结束,将过滤器作用于该段内容上
除了内置的过滤器,可以使用app.template_filter作为装饰器或者方法,实现自定义过滤器
-
测试器
作用于变量或者表达式,返回布尔值(True或False)
除了内置的测试器,可以通过app.template_tester作为装饰器或者方法,实现自定义测试器
-
模板环境对象
在Jinja2中,由Jinja2.Environment对象控制渲染,而在Flask中可对app.jinja_env属性的字典对象的3个键值:global、filter、tests,分别设置模板环境中的全局函数、过滤器、测试器。
三、模板结构组织
-
局部模板
通过 {%include 模板文件%} 导入作为局部模板
-
宏
作用类似于Python里面的函数。通过 {%macro 宏名%} {%endmacro%} 定义一段宏,宏可以定义参数并返回值
通过 {%from 模板文件 import 宏名%} 导入宏使用
使用with context导入当前模板的上下文
-
模板继承
首先要编写一个基模板(如base.html或者)来固定页面中不变的部分
通过 {%block 块名%} {%endblock%} 定义基模板对应位置的固定内容,如head表示
<head>
标签内容,title表示<title>
标签内容然后编写子模板,对基模板进行继承,第一个标签必须为 {%extends 基模板名%} 。对于基模板的块,可以通过编写同名块覆盖基模板块的功能,或者加入 {{ super() }} 对该块追加内容
四、模板进阶实践
-
空白控制
对定界符内侧添加"-"去除对应显示的空白行,也可通过设置环境变量对象
#去除Jinja2语句后的第一个空白行
app.jinja_env.trim_blocks = True
#去除Jinja2语句前的空白和制表符
app.jinja_env.lstrip_blocks = True
宏内的空白只能通过手动添加"-"进行控制
-
加载静态文件
Flask内置了用于获取静态文件的视图函数,端点值为static,默认URL为/static/
<path:filename>
1.添加Favicon,即网站/收藏夹头像,设置方式为:
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
2.使用css框架
3.使用宏加载静态资源
-
消息闪现
使用flash()函数可把消息存储在session当中,通过get_flashed_messages()调用,调用后将移除session里的消息
-
自定义错误页面
编写错误页面模板,然后通过app.errorhandler(错误状态码)调用该页面
-
js/css中使用Jinja2
在js/css中定义为变量再使用