需求场景
过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。
使用方式:
- 过滤器的使用方式为:变量名 | 过滤器。
常见内建过滤器
字符串过滤器
-
safe:禁用转义(下一篇进行解释);
<p>{{ '<em>hello</em>' | safe }}</p> -
capitalize:把变量值的首字母转成大写,其余字母转小写;
<p>{{ 'hello' | capitalize }}</p> -
lower:把值转成小写;
<p>{{ 'HELLO' | lower }}</p> -
upper:把值转成大写;
<p>{{ 'hello' | upper }}</p> -
title:把值中的每个单词的首字母都转成大写;
<p>{{ 'hello' | title }}</p> -
trim:把值的首尾空格去掉;
<p>{{ ' hello world ' | trim }}</p> -
reverse:字符串反转;
<p>{{ 'olleh' | reverse }}</p> -
format:格式化输出;
<p>{{ '%s is %d' | format('name',17) }}</p>
链式使用过滤器(也就是一个字符串可以同时使用多个过滤器用符号 '|' 隔开)
- <p>{{ “ hello world “ | trim | upper }}</p>
列表过滤器
-
first:取第一个元素
<p>{{ [1,2,3,4,5,6] | first }}</p> -
last:取最后一个元素
<p>{{ [1,2,3,4,5,6] | last }}</p> -
length:获取列表长度
<p>{{ [1,2,3,4,5,6] | length }}</p> -
sum:列表求和
<p>{{ [1,2,3,4,5,6] | sum }}</p> -
sort:列表排序
<p>{{ [6,2,3,1,5,4] | sort }}</p>
自定义过滤器(自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。)
方式一:通过 add_template_filter (过滤器函数, 模板中使用的过滤器名字)
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
app.add_template_filter(do_listreverse,'lireverse')
模板代码
方式二:通过装饰器 app.template_filter (模板中使用的装饰器名字)
@app.template_filter('lireverse')
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
代码实例