作用的对象是jinja2模版中的变量({ {}})
参考链接:
http://jinja.pocoo.org/docs/2.9/templates/#builtin-filters
内置过滤器
字符串操作
{ # 当变量未定义时,显示默认字符串,可以缩写为d #}{
{ name | default('No name', true) }} { # 单词首字母大写 #}{
{ 'hello' | capitalize }} { # 单词全小写 #}{
{ 'XML' | lower }} { # 去除字符串前后的空白字符 #}{
{ ' hello ' | trim }} { # 字符串反转,返回"olleh" #}{
{ 'hello' | reverse }} { # 格式化输出,返回"Number is 2" #}{
{ '%s is %d' | format("Number", 2) }} { # 关闭HTML自动转义 #}{
{ 'name' | safe }} { % autoescape false %}{ # HTML转义,即使autoescape关了也转义,可以缩写为e #}{
{ 'name' | escape }}{ % endautoescape %}
#用管道的形式,如果avatar(后端传过来的变量)的值不存在,则用default的值 { { avatar|default('xxx') }}
#这里的意思为获取avatar的长度,avatar为后端传过来的变量,可以是列表,也可以是字典 { { avatar|length }}
数值操作
{ # 四舍五入取整,返回13.0 #}{
{ 12.8888 | round }} { # 向下截取到小数点后2位,返回12.88 #}{
{ 12.8888 | round(2, 'floor') }} { # 绝对值,返回12 #}{
{ -12 | abs }}
列表操作
{ # 取第一个元素 #}{
{ [1,2,3,4,5] | first }} { # 取最后一个元素 #}{
{ [1,2,3,4,5] | last }} { # 返回列表长度,可以写为count #}{
{ [1,2,3,4,5] | length }} { # 列表求和 #}{
{ [1,2,3,4,5] | sum }} { # 列表排序,默认为升序 #}{
{ [3,2,1,5,4] | sort }} { # 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #}{
{ [1,2,3,4,5] | join(' | ') }} { # 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #}{
{ ['tom','bob','ada'] | upper }}
字典列表操作
{% set users=[{ 'name':'Tom','gender':'M','age':20}, { 'name':'John','gender':'M','age':18}, { 'name':'Mary','gender':'F','age':24}, { 'name':'Bob','gender':'M','age':31}, { 'name':'Lisa','gender':'F','age':19}]%} { # 按指定字段排序,这里设reverse为true使其按降序排 #}
- { % for user in users | sort(attribute='age', reverse=true) %}
- { { user.name }}, { { user.age }} { % endfor %}
- { % for group in users|groupby('gender') %}
- { { group.grouper }}
- { % for user in group.list %}
- { { user.name }} { % endfor %}
{ % endfor %}
{
{ users | map(attribute='name') | join(', ') }}
内置过滤器:tojson,配合js使用
注意,这里要避免HTML自动转义,所以加上safe过滤器。
自定义过滤器
自定义过滤器其实就是一个函数,自己写即可
def mylen(arg):#实现一个可以求长度的函数 return len(arg)# 该函数实现给定一个区间返回区间的内容def interval(test_str, start, end):#过滤器中传递多个参数,第一个参数为被过滤的内容,第二第三个参数需要自己传入 return test_str[int(start):int(end)]env = app.jinja_envenv.filters['mylen'] = mylen #注册自定义过滤器env.filters['interval'] = interval #注册自定义过滤器 @app.route("/") def index(): test_str = "hello" return render_template("index.html", test_str=test_str) jinja2模板len: { {test_str|mylen}}
interval: { {test_str|interval(0,2)}}
#test_str作为参数传到interval函数里