过滤器

过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,这就用到了过滤器。

过滤器的使用方式为:变量名 | 过滤器。

常用过滤器如下:

字符串操作:

过滤器 作用 示例
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

更多内置过滤器查看jinja2官网

自定义过滤器

当模板内置的过滤器不能满足需求,可以自定义过滤器。

自定义过滤器有两种实现方式:

第一种是通过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)}} {# 有参数#}
Iyoyo电子书 一本集作者多年开发经验的python电子书 all right reserved,powered by Gitbook文件修订时间: 2022年 16:03:18