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:去除左右两边的空格,不会转义&nbsp;-->
{{'            l ov  e   '|trim}}==================>l ov e

<br>{{'            l&nbsp;&nbsp;&nbsp;&nbsp; ov  e   '|trim}}==========l&nbsp;&nbsp;&nbsp;&nbsp; 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.列表过滤器:

  1. 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:,

 







posted @ 2020-11-20 10:26  稻草人12  阅读(341)  评论(0编辑  收藏  举报