![7391a8fb5b10dc091bb9aa9b6e24e25d.png](https://i-blog.csdnimg.cn/blog_migrate/1c2993882d33d4d4da569a8110288e1e.jpeg)
简介和使用方法
过滤器本质上是一种能够在模板中调用且拥有特殊传参方式的函数。过滤器通过管道符号(pipe symble) |
把变量和函数分开。同时,多个过滤器可以同时使用,前一个过滤器的返回值会作为下一个过滤器的输入值 。
例如,{{name|title}}
会把变量name
的值转换为标题形式(每个word的首字母大写)。其效果和 title(name)
是一样的。同时,过滤器可以在圆括号内接收多个参数。
另一种用法是将过滤器作用于一部分模板数据,使用filter
和endfilter
标签声明开始和结束。比如, 使用upper
过滤器将一段文字转化为大写:
{% filter upper %}
This is a string.
{% endfilter %}
内置过滤器(Builtin Filters)
为了方便使用,Jinja模板内置了很多好用的过滤器,具体可以移步官方文档查看。这里只举几个简单的例子。
default
(value,default_value='',boolean=False)
default
过滤器可以为参数设定默认值,当参数未定义时,模板会显示默认值。
{{ ''|default('the string was empty', true) }}
groupby
(value,attribute)
根据共有对象的属性,把一个对象序列分为多组。例如下面这段代码,就可以在表格中按照性别分组显示。
<ul>
{% for group in persons|groupby('gender') %}
<li>{{ group.grouper }}<ul>
{% for person in group.list %}
<li>{{ person.first_name }} {{ person.last_name }}</li>
{% endfor %}</ul></li>
{% endfor %}
</ul>
reverse
(value)
反转一个对象,或返回一个反转后的迭代器
自定义过滤器(Custom Filters)
前面说过,过滤器本质上是函数。所以自定义过滤器非常简单,只需要写一个函数,让后将其注册为模板的过滤器即可。我们以一个非常简单的例子说明,注册函数有三种方法:一种是使用装饰器,一种是app方法注册,还有一种直接修改模板环境对象的”非常规方法“。
方法一:装饰器
注册装饰器最简单的方法就是使用@app.template_filter()
装饰器。
@app.template_filter()
def reverse_filter(s):
return s[::-1]
方法二:工厂函数式
再有一种方法是使用app.add_template_filter()
函数进行注册,一般会在工厂函数内使用。
def reverse_filter(s):
return s[::-1]
app.add_template_filter(reverse_filter)
方法三:操作模板环境对象
测试器存储在Environment
对象的filters
属性中,filters
是字典对象,可以直接操作字典对象。
def reverse_filter(s):
return s[::-1]
app.jinja_env.filters['reverse'] = reverse_filter
参考文献
Template Designer Documentationjinja.palletsprojects.com感谢关注、点赞、收藏。
同时,欢迎关注我的微信公众号『极简应用Tools』。