今天,我们要讲的是自定义Jinja2 过滤器这个知识点,因为官方文档对此一代而过,讲得不够清楚,所以我们专门拿出来讲一下。
例子
例子写了两个自定义过滤器,一个是转换字典到字符串的过滤器,一个是返回当前参数的类型的过滤器。
源代码:
https://github.com/lewis617/myflask/tree/master/jinja2-filter
过滤器是个函数
过滤器是个函数,跟Angular的过滤器几乎一模一样。参数就是管道(pipe)前面那个变量。比如 123|myfilter
,123
就是myFilter
的参数。如果需要两个参数,则在myFilter
后面加()
,即123|myFilter(234)
。
过滤器函数写在哪
这是这个是编写过滤器的关键。过滤器函数写在app.run
前,注册在app.jinja_env.filters
中,这是什么意思?看代码:
1 | app = Flask(__name__) # custom filter # convert dict to string |
- 实例化一个Flask对象
app
- 编写两个函数
- 将函数挂在
app.jinja_env.filters
上
就是这么简单!
测试示例代码
第一个过滤器转换字典到字符串,第二个返回当前参数的类型
我们在index.html中编写:
1 | <body> |
然后在app.py中渲染这个html
1 |
|
结果:
json_dumps
可以将dict转为字符串,这样我们用Jinja渲染的对象列表之类的就可以,以字符串的形式打印出来,便于我们在开发环境下监视渲染状态。