Flask中常用的过滤器:
Length:
这个过滤器扮演了与Python中的len()方法相同的角色。
Task的数量:{{post.task_len | length }}
Task的数量:4
Round:
它会把一个浮点数转换到给定的小数位数:
{{3.1415 | round(2)}}
3.14
还可以指定如何转换:
{{ 4.7 | round(1,”common”)}}
5
{{4.2 | round(1,”common”)}}
4
{{4.7 | round(1,”floor”)}}
4
{{4.2 | round(1,ceil)}}
5
common代表的方式就跟我们在生活中做的一样:对多余位数进行四舍五入,floor则总是把位数直接截断,ceil总是会向上取整,不论后面的小数是多少。
Safe:
如果你想直接把HTML作为变量插入页面中,比如在想显示一篇博客文章的时候,Jinja会自动尝试对输出进行HTML转义:
{{“<h1>Post Title</h1>”}}
<h1>Post Title</h1>
这是必要的安全措施,如果应用的某个输入接口允许用户提交任何文本,那么恶意用户也可以用它来提交HTML代码。比如,一名用户在回复框里提交了含有script标签的文本,如果Jinja没有转义功能,那么访问这个页面的所有浏览器都会执行这个标签中的脚本。
对安全的HTML不转义且直接显示,用safe来实现:
{{“<h1>Post Title</h1>” | safe}}
<h1>Post Title</h1>
title
把字符串中单词的首字符改为大写格式:
{{“post title” | title}}
Post Title
Tojson
可以用这种方式调用Python的json.dumps函数来序列化对象。需要确保传过去的对象是可被json模块序列化的:
{{ {‘key’:False,’key2’:None,’key3’:4} | tojson}}
{key:false,key2:null,key3:45}
truncate:
用于接收一个长字符串,返回一个截断成指定长度的字符串,并添加省略号:
{{ “Long Time No See” |truncate(4)}}
Long…
自定义过滤器
在Jinja中增加一个过滤器非常简单,就跟在Python中写一个函数一样。我们可以通过一个例子来理解过滤器的原理。下面这个简单的过滤器会计算一个子字符串在原字符串中出现的次数,并且将其返回,调用方式是:
{{ variable | filter_name(“string”)}}
在Python中会被转换成:
filter_name(variable,”string”)
因此我们可以这样定义过滤器函数:
def count_substring(string,sub):
return string.count(sub)
我们需要在main.py文件中手动地把它加入jinja_env对象的filter字典,以使该函数可作为过滤器被调用:
app.jinja_env.filters[‘count_substring’]=count_substring