Skip to content

六、模板环境

一、模版上下文

1、自定义模板变量

使用set变量定义新变量

python
{% set name="admin" %}

使用set赋值语句创建的变量在其之后都是有效的。如果不想让一个变量污染全局环境,可以使用with语句来创建一个作用域

python
{% with %}
	{% set foo=42 %}
	{{ foo }}
{% endwith %}

2、Jinja2内置变量

变量描述
g当前请求中的全局对象。一般会把当前请求中多个地方需要用到的变量绑定到上面
request当前请求对象。通过它可以获取请求的信息
session当前请求的session对象
config项目的配置对象

3、自定义上下文处理器

使用@app.context_processor

python
@app.context_processor
def context_user():
    user={"username":"admin","level":2}
    return {"user":user}

二、全局函数(模板内使用)

1、自定义全局函数

如果要实现自定义的全局函数,可以通过app.template_global装饰器来实现

python
@app.template_global()
def welcome(name):
    return "欢迎!%s"name

模板内使用

python
<div>{{ welcome("张三")}}</div>

2、内置全局函数

1、Jinja2内置的全局函数(https://jinja.palletsprojects.com/en/3.0.x/templates/#list-of-global-functions)

函数名描述
range(start,stop,step)获取一个等差级数的列表,与python中的range一样
lipsum(n=5,html=True,min=20,max=100)在模板中生成随机的文本,默认会生成5段HTML代码,每段是20~100个字符。如果html设置为False,那么返回纯文本内容
dict(**items)转换为字典,与Python的dict一样

2、Flask内置的全局函数

函数名描述
url_for用于加载静态文件,或者用于构建URL
get_flashed_message用于获取闪现消息

三、Flask模板环境

在Flask中使用jinja2,使用app.jinja_env属性来配置模板

属性描述
app.jinja_env.autoescape=Flase设置autoesscape(全局转义)
app.jinja_env.filters添加过滤器
app.jinja_env.globals["user"]=user添加全局对象
app.jinja_env.tests添加测试器