过滤器
过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,这就用到了过滤器。
过滤器的使用方式为:变量名 | 过滤器。
常用过滤器如下:
字符串操作:
过滤器 | 作用 | 示例 |
---|---|---|
safe | 禁用转义 | { { '<em>hello</em>' 丨 safe } } |
capitalize | 把变量值的首字母转成大写,其余字母转小写 | { { 'hello' 丨 capitalize } } |
lower | 字符串转成小写 | { { 'hello' 丨 lower } } |
upper | 字符串转成大写 | { { 'hello' 丨 lower } } |
title | 把值中的每个单词的首字母都转成大写 | { { 'hello world' 丨 title } } |
trim | 把值的首尾空格去掉 | { { ' hello world ' 丨 trim } } |
reverse | 字符串反转 | { { 'hello' 丨 reverse } } |
format | 格式化输出 | { { '%s is %d' 丨 format('name',17) } } |
striptags | 渲染之前把值中所有的HTML标签都删掉 | { { '<em>hello</em>' 丨 striptags } } |
truncate | 截取前几个字符,后面使用....表示,第一个参数是截取几个字符,第二个参数是是否使用...显示 | { { name 丨 truncate(3, True) } } |
escape | 开启转义 | { { '<em>name</em>' 丨 escape } } |
列表操作:
过滤器 | 作用 | 示例 |
---|---|---|
first | 取第一个元素 | { { [1,2,3,4,5,6] 丨 first } } |
last | 取最后一个元素 | { { [1,2,3,4,5,6] 丨 last } } |
length | 获取列表长度 | { { [1,2,3,4,5,6] 丨 length } } |
sum | 列表求和 | { { [1,2,3,4,5,6] 丨 sum } } |
sort | 列表排序 | { { [6,2,3,1,5,4] 丨 sort } } |
数值操作:
过滤器 | 作用 | 示例 |
---|---|---|
round | 四舍五入取整 | { { 12.8888 丨 round } } 得到13.0 |
round | 向下截取到小数点后2位,返回12.88 | { { 12.8888 丨 round(2, 'floor') } }得到13.89 |
abs | 绝对值,返回12 | { { -12 丨 abs } } 得到12 |
自定义过滤器
当模板内置的过滤器不能满足需求,可以自定义过滤器。
自定义过滤器有两种实现方式:
第一种是通过Flask应用对象的add_template_filter方法。
第二种是通过 template_filter 装饰器来实现自定义过滤器。
自定义过滤器不能和内置过滤器重名,否则会将内置的过滤器覆盖掉。
方法一:
def filter_mod_1(num):
return num % 2
# 该方法第一个参数是函数名,第二个参数是自定义的过滤器名称。
app.add_template_filter(filter_mod_1, 'my_mod_1')
方法二:
# 通过装饰器,自定义过滤器,装饰器接受一个参数:过滤器名称
# 过滤器函数接收变量
@app.template_filter('my_mod')
def filter_mod(num):
return num % 2
带参数过滤器
@app.template_filter('filter_list')
def filter_list(li, start, end):
"""自定义过滤器,自定义截取列表区间"""
return li[start:end]
在模板中调用传参数过滤器后面加小括号,就跟python调用方法一样:
{{a|my_mod}} {#没参数#}
{{b|filter_list(2,5)}} {# 有参数#}