切换主题
六、模板环境
一、模版上下文
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 | 添加测试器 |