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