jinjia2内置过滤器笔记

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
  <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

特性:
沙箱中执行
强大的 HTML 自动转义系统保护系统免受 XSS
模板继承
及时编译最优的 python 代码
可选提前编译模板的时间
易于调试。异常的行数直接指向模板中的对应行。
可配置的语法

jinjia2内置过滤器

@ 字符串操作
{# 输出大写 #}
<h1>hello {{ name|upper }}!</h1>
 
 
{# 输出大写,超过3个字符打断,用'...'替代 #}
<h1>hello {{ name|upper|truncate(3,True) }}</h1>
 
 
{# 当变量未定义时,显示默认字符串,可以缩写为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自动转义 #}
{{ '<em>name</em>' | safe }}
 
  
{% autoescape false %}
{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
{{ '<em>name</em>' | escape }}
{% endautoescape %}


@ 数值操作
{# 四舍五入取整,返回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使其按降序排 #}
<ul>
{% for user in users | sort(attribute='age', reverse=true) %}
<li>{{ user.name }}, {{ user.age }}</li>
{% endfor %}
</ul>
 
 
 
{# 列表分组,每组是一个子列表,组名就是分组项的值 #}
<ul>
{% for group in users|groupby('gender') %}
<li>{{ group.grouper }}
<ul>
    {% for user in group.list %}
<li>{{ user.name }}</li>
    {% endfor %}</ul>
</li>
{% endfor %}
</ul>
  
 
{# 取字典中的某一项组成列表,再将其连接起来 #}
{{ users | map(attribute='name') | join(', ') }}

文章来源gogo闯,微信公众号:流量贩子

Leave a Comment