flask 模板过滤器及自定义模板过滤器
内置的模板过滤器:
过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,这就用到了过滤器。
过滤器的使用方式为:变量名 | 过滤器。 过滤器名写在变量名后面,中间用 | 分隔。
1.字符串过滤器:
<!--safe :禁用html转义--> {{'<em>html</em>'|safe}} ==========> html <br/> {{'<b>我是0加粗的字体</b>'|safe}}==============>我是0加粗的字体 <br/> <!--capitalize:将第一个单词的首字母大写,其余都是小写--> {{'we help each other'|capitalize}}==================>We help each other <br/> <!--title:将每一个单词的首字母都大写--> {{'we help each other'|title}}===================>We Help Each Other <br/> <!--lower:将所有字符串的大写转换成小写,非字母保持不变--> {{'HELLo'|lower}}==========================>hello <br> <!--upper:将所有字符串的小写转换成大写,非字母保持不变--> {{'he,llo'|upper}}==========================>HE,LLO <br> <!--trim:去除左右两边的空格,不会转义 ;--> {{' l ov e '|trim}}==================>l ov e <br>{{' l ov e '|trim}}==========l ov e <br> <!--reverse:将单词中每个字符进行反转--> {{'hello'|reverse}}=================>olleh <br> <!--format:格式化输出--> {{'%s今年%d岁了'|format('小丽',20)}}============>小丽今年20岁了 <br> <!--striptags:将字符串中所有的html标记全部删除(不管是否禁用html转义都能直接删除)--> {{'<font color="red">红色字</font>'|safe|striptags}}===========》红色字 <br> 过滤器是支持链式操作的(没有级联关系,就是根据写入的顺序依次执行): {{'hello erveryone'|upper|lower|title|reverse}}===============》enoyrevrE olleH
2.列表过滤器:
- first:取列表中的第一个元素
{{[1,2,3,4,5]|first}}========>1
2. last:取列表中最后一个元素
{{[1,2,3,4,5]|last}}=========>5
3.length:去列表中列表的长度
{{[1,2,3,4,5]|length}}=====>5
4.sum:对列表中元素进行求和
{{[1,2,3,4,5]|sum}}=========>15
5.sort:对列表元素进行升序
sort:对列表元素进行升序====>[1, 2, 3, 4, 5]
6.sort(reverse=true):对列表元素进行降序
{{[1,2,3,4,5]|sort(reverse=true)}}=======>[5, 4, 3, 2, 1]
7.join:对列表元素进行拼接
{{['a',1,'b',2,'c','d']|join('.')}}=======>a.1.b.2.c.d
自定义模板过滤器:
过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。自定义过滤器有两种实现方式:一种是通过Flask应用对象的add_template_filter方法。还可以通过装饰器来实现自定义过滤器。
1.通过调用应用程序实例的add_template_filter方法实现自定义过滤器。该方法第一个参数是函数名,第二个参数是自定义的过滤器名称。
def filter_template(list): return list[::2] app.add_template_filter(filter_template,'my_filter')
2.实现方式二:用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。
@app.template_filter('my_filter') def filter_double_sort(list): return list[::2]
定义后的过滤器直接在模板文件里使用即可,
{{"1,2,a5:6,8"|my_filter}}========》12a:,