即使一个人,也要活得像军队一样!

jinja2-- jinja2模板过滤器

###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‘标签,可以对他里面的代码块关闭或开启自动转义。

1
2
3
{% autoescape off %}  {#使用闭合标签关闭自动转义,off关闭,on开启#}
<p>{{ talk|escape }}</p>
{% endautoescape %}

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

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

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

#####自定义时间处理过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
1
<p>{{ create_time|handle_time }} </p>

###宏
宏类似于Python中的函数,我们在宏中定义行为,还可以进行传递参数,就像Python中的函数一样一样儿的。

在宏中定义一个宏的关键字是macro,后面跟其 宏的名称和参数等

1
2
3
{% macro input(name,age=18) %}  # 参数age的默认值为18
<input type='text' name=" {{ name }}" value=" {{ age }}" >
{% endmacro %}

调用方法也和Python的类似

1
2
<p>{{ input('daxin') }} </p>
<p>{{ input('daxin',age=20) }} </p>
-------------本文结束感谢您的阅读-------------