Flask Web第三章
第三章
3.1.1创建模板
-
Jinjia2定界符
-
语句{%...%},如if、for
-
表达式{{...}},如变量、字符串、函数等
-
注释{#...#}
-
-
Jinjia2支持使用.获取变量的属性
3.1.3渲染模板
-
使用render_template()函数,第一个参数传入文件名作为参数,后面可接任意个关键字参数做模板变量,如render_template('index.html',user=user)
-
传入的变量值可以是字符串、列表、字典,也可以是函数、类和类实例
-
想传入函数在模板中调用,那么传参时只写函数名,即不带()
3.2.1上下文
-
上下文包含很多变量,如手动传入的变量、Flask默认传入的变量、使用set标签自定义的变量
-
set标签使用
-
{%set name='Tom' %}
-
{%set name%}
...........
...........
{%endset%}
-
-
内置上下文变量,可直接使用
-
config:当前配置对象
-
request:当前请求对象,在已激活的请求环境下用
-
session:当前回话对象,在已激活的请求环境下用
-
g:与请求绑定的全局变量,在已激活的请求环境下用
-
-
自定义上下文:若多个模板都需要使用同一个变量,不必再多个视图函数重复传入,可使用@app.context_pocessor装饰器注册模板上下文处理函数,注意:该函数要返回一个包含变量键值对的字典。每一个render_template()函数执行,使用该装饰器的函数都会执行,将变量加到模板中
3.2.2全局对象
-
定义:指在所有模板都可以直接使用的对象
-
内置全局函数
-
range():与python的range()用法相同
-
lipsum():生成随机文本,在测试时填充页面,默认5段
-
dict():与python的dict()用法相同
-
url_for():生成URL,与视图函数中相同
-
get_flash_messages():用于获取flash消息的函数
-
-
自定义全局函数:除了使用@app.context_pocessor装饰器传入函数,还可以使用@app.template_global装饰器将函数注册为模板全局函数
3.2.3过滤器
-
过滤器的一个参数在|前,后面的参数可以添加括号传入
-
过滤器可以叠加
-
自定义过滤器:使用app.template_filter装饰器,过滤器函数接收被处理参数,返回对参数的处理后的值
3.2.4测试器
-
测试器用来判断变量或表达式,返回布尔值,使用is连接变量和测试器
-
测试器第一个参数在is左侧,若有其他参数,可添加括号传入或者使用空格连接参数
-
自定义测试器:使用app.template_test()装饰器
3.3.1局部模板
-
使用include标签插入,局部模板的内容会插入在使用include标签的位置
-
为了与普通模板区别,局部模板命名常以一个下划线开始
3.3.2 宏
-
类似python的函数,可以使用传递的参数构建内容,返回构建后的结果,为便于管理,把宏单独存储一个文件,通常命名macros.html或者_macros.html
-
使用macro和endmacro标签声明宏的开始和结束,在开始标签中定义宏的名称和接收的参数。如
{% macro qux(amount=1)%}
{%if amout ==1 %}
...
{%endif%}
{%endmacro%}
-
使用时,使用import导入,作为函数调用,传入必要参数。如
{%from ‘macro.html' import qux%}
...
{{ qux(amout=5) }} 注意:这里是{{....}}
-
注意:include标签插入局部模板时,局部模板的环境跟正常相同。但使用macro时,这个模板只能使用1.全局函数(包括自定义的全局函数)2.过滤器(含自定义的)、测试器(含自定义的)
-
注意:上调说了使用macro的环境问题,可以在导入时显示使用with context声明传入当前模板的上下文。{%from 'macro.html' import foo with context%}
3.3.3模板继承
-
extends扩展基模板,必须放在子模板第一个标签。{%extends 'base.html'%}
-
使用super()函数进行声明,函数下面追加子模板的内容
3.4.2加载静态文件
-
使用url_for()函数引用静态文件,内置的获取静态文件的视图函数端点值为static,默认URL规则为/static/<path:filename>,filename是相对于static文件夹根目录的文件路径,如url_for('static',filename='favicon.ico')
3.4.4自定义错误页面
-
使用@app.errorhandler(状态码)装饰器,错误处理函数接收异常类作为参数,在返回值中注明http状态码
@app . errorhandler(404 )
def page not found(e) :
return render template (’ errors/404.html ’) ', 404

浙公网安备 33010602011771号