的过滤器使用变量_第二问 · FLask Jinja模板中的过滤器是什么?可以做什么?如何使用?...

7391a8fb5b10dc091bb9aa9b6e24e25d.png

简介和使用方法

过滤器本质上是一种能够在模板中调用且拥有特殊传参方式的函数。过滤器通过管道符号(pipe symble) |把变量和函数分开。同时,多个过滤器可以同时使用,前一个过滤器的返回值会作为下一个过滤器的输入值 。

例如,{{name|title}} 会把变量name的值转换为标题形式(每个word的首字母大写)。其效果和 title(name) 是一样的。同时,过滤器可以在圆括号内接收多个参数。

另一种用法是将过滤器作用于一部分模板数据,使用filterendfilter标签声明开始和结束。比如, 使用upper过滤器将一段文字转化为大写:

{% filter upper %}
    This is a string.
{% endfilter %}

内置过滤器(Builtin Filters)

为了方便使用,Jinja模板内置了很多好用的过滤器,具体可以移步官方文档查看。这里只举几个简单的例子。

  • default(value,default_value='',boolean=False)

default过滤器可以为参数设定默认值,当参数未定义时,模板会显示默认值。

{{ ''|default('the string was empty', true) }}
  • groupby(value,attribute)

根据共有对象的属性,把一个对象序列分为多组。例如下面这段代码,就可以在表格中按照性别分组显示。

<ul>
{% for group in persons|groupby('gender') %}
    <li>{{ group.grouper }}<ul>
    {% for person in group.list %}
        <li>{{ person.first_name }} {{ person.last_name }}</li>
    {% endfor %}</ul></li>
{% endfor %}
</ul>
  • reverse(value)

反转一个对象,或返回一个反转后的迭代器

自定义过滤器(Custom Filters)

前面说过,过滤器本质上是函数。所以自定义过滤器非常简单,只需要写一个函数,让后将其注册为模板的过滤器即可。我们以一个非常简单的例子说明,注册函数有三种方法:一种是使用装饰器,一种是app方法注册,还有一种直接修改模板环境对象的”非常规方法“。

方法一:装饰器

注册装饰器最简单的方法就是使用@app.template_filter() 装饰器。

@app.template_filter()
def reverse_filter(s):
    return s[::-1]

方法二:工厂函数式

再有一种方法是使用app.add_template_filter() 函数进行注册,一般会在工厂函数内使用。

def reverse_filter(s):
    return s[::-1]

app.add_template_filter(reverse_filter)

方法三:操作模板环境对象

测试器存储在Environment对象的filters属性中,filters是字典对象,可以直接操作字典对象。

def reverse_filter(s):
    return s[::-1]

app.jinja_env.filters['reverse'] = reverse_filter

参考文献

Template Designer Documentation​jinja.palletsprojects.com

感谢关注、点赞、收藏。

同时,欢迎关注我的微信公众号『极简应用Tools』。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值