美文网首页
jinja2模板过滤器

jinja2模板过滤器

作者: 张大超Charlie | 来源:发表于2019-03-09 16:10 被阅读0次

jinja2模板过滤器

过滤器是通过管道符号’|‘进行使用的,例如{{ name|length }},
将返回name的长度,过滤器相当于一个函数,把当前变量传入到过滤
器中,然后过滤器根据自己的功能,返回相应的值,之后再将结果渲染
到页面中。

基本用法:

{{变量|过滤器名}}

常用过滤器:

default过滤器:

  1. 使用方式:{{ value|default('默认值') }},如果value这个key不
    存在,那么就会使用default过滤器提供的默认值。
  2. 如果你想判断一个值是否为False(例如:None、空字符串、空列表、
    空字典),那么就必须传递另外一个参数{{ value|default('默认值',boolean=True) }}
    可以使用‘or’来替代default 例如{{ signature or ‘no signature’}}。

自动转义过滤器:

  1. ’safe‘过滤器:可以关闭一个字符串的自动转义。
  2. ‘escape’过滤器:对某一改字符串进行转义。
  3. ’autoescape‘标签,可以对他里面的代码块关闭或开启自动转义。
{% autoescape off %}  {#使用闭合标签关闭自动转义,off关闭,on开启#}
<p>{{ talk|escape }}</p>
{% endautoescape %}

等等还有很多常用过滤器,请自行查阅。

自定义过滤器:

过滤器本质上是一个函数。如果在模板中调用这个过滤器,就会将这个变量的值作为
第一个参数传给过滤器函数,然后过滤器函数返回过滤后的值,需要使用到一个装饰
器,@app.template_filter('自定义过滤器名')。

@app.template_filter('my_cut')
def cut(value):
    value = value.replace('hello', '')
    return value
{{ article|my_cut }}

自定义时间处理过滤器:

create_time = datetime(2019, 1, 9, 15, 11, 0)  # 发表时间

@app.template_filter('handle_time')
def handle_time(time):
    if isinstance(time, datetime):
        now = datetime.now()
        timestamp = (now - time).total_seconds()
        if timestamp < 60:
            return '刚刚'
        elif 60 <= timestamp <= 60*60:
            minutes = timestamp/60
            return '%s分钟前' % int(minutes)
        elif 60*60 <= timestamp <= 60*60*24:
            hours = timestamp/(60*60)
            return "%s小时前" % int(hours)
        elif 60*60*24 <= timestamp <= 60*60*24*30:
            days = timestamp/(60*60*24)
            return "%s天前" % int(days)
        else:
            return time.strftime("%Y/%m/%d %H:%M")
    else:
        return time
<p>{{ create_time|handle_time }}</p>

相关文章

网友评论

      本文标题:jinja2模板过滤器

      本文链接:https://www.haomeiwen.com/subject/jezspqtx.html