jinja2模板过滤器
2019-03-09 本文已影响0人
张大超Charlie
jinja2模板过滤器
过滤器是通过管道符号’|‘进行使用的,例如{{ name|length }},
将返回name的长度,过滤器相当于一个函数,把当前变量传入到过滤
器中,然后过滤器根据自己的功能,返回相应的值,之后再将结果渲染
到页面中。
基本用法:
{{变量|过滤器名}}
常用过滤器:
default过滤器:
- 使用方式:{{ value|default('默认值') }},如果value这个key不
存在,那么就会使用default过滤器提供的默认值。 - 如果你想判断一个值是否为False(例如:None、空字符串、空列表、
空字典),那么就必须传递另外一个参数{{ value|default('默认值',boolean=True) }}
可以使用‘or’来替代default 例如{{ signature or ‘no signature’}}。
自动转义过滤器:
- ’safe‘过滤器:可以关闭一个字符串的自动转义。
- ‘escape’过滤器:对某一改字符串进行转义。
- ’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>