Flask中的jinji2---过滤器
在 Jinja2 中,过滤器是用于对模板变量进行操作的工具,类似于管道。以下是 Jinja2 中常用的过滤器及其功能:
1. 字符串处理
capitalize
将字符串的首字母大写,其余部分小写。
{{ "hello world" | capitalize }} <!-- 输出: Hello world -->
lower
将字符串转为小写。
{{ "HELLO" | lower }} <!-- 输出: hello -->
upper
将字符串转为大写。
{{ "hello" | upper }} <!-- 输出: HELLO -->
title
将字符串中每个单词的首字母大写。
{{ "hello world" | title }} <!-- 输出: Hello World -->
trim
去掉字符串两端的空格。
{{ " hello " | trim }} <!-- 输出: hello -->
replace
替换字符串中的子串。
{{ "hello world" | replace("world", "Jinja2") }} <!-- 输出: hello Jinja2 -->
2. 列表处理
length
返回列表、字符串或字典的长度。
{{ [1, 2, 3, 4] | length }} <!-- 输出: 4 -->
join
将列表中的元素用指定字符串连接为一个字符串。
{{ ["Python", "Flask", "Jinja2"] | join(", ") }} <!-- 输出: Python, Flask, Jinja2 -->
sort
对列表进行排序(默认为升序)。
{{ [3, 1, 4, 2] | sort }} <!-- 输出: [1, 2, 3, 4] -->
unique
移除列表中的重复元素。
{{ [1, 2, 2, 3, 4, 4] | unique }} <!-- 输出: [1, 2, 3, 4] -->
reverse
将列表或字符串反转。
{{ [1, 2, 3] | reverse }} <!-- 输出: [3, 2, 1] --> {{ "hello" | reverse }} <!-- 输出: olleh -->
3. 数值处理
abs
返回绝对值。
{{ -5 | abs }} <!-- 输出: 5 -->
round
对数值进行四舍五入。
{{ 3.14159 | round(2) }} <!-- 输出: 3.14 -->
sum
对列表或字典的值求和。
{{ [1, 2, 3, 4] | sum }} <!-- 输出: 10 -->
4. 字典处理
keys
返回字典中的键。
{{ {"a": 1, "b": 2} | keys }} <!-- 输出: ["a", "b"] -->
values
返回字典中的值。
{{ {"a": 1, "b": 2} | values }} <!-- 输出: [1, 2] -->
5. 默认值处理
default
如果变量未定义或为 None
,使用默认值。
{{ user | default("Guest") }} <!-- 如果 user 未定义,则输出: Guest -->
6. 测试和逻辑处理
defined
检查变量是否已定义。
{{ user is defined }} <!-- 如果 user 定义了,则输出: True -->
equalto
检查变量是否等于某个值。
{{ score is equalto 100 }} <!-- 如果 score 等于 100,则输出: True -->
7. 日期和时间
strftime
格式化日期。
{{ date | strftime("%Y-%m-%d") }} <!-- 输出: 2025-01-15 -->
8. 安全处理
escape
转义 HTML 字符。
{{ "<div>Hello</div>" | escape }} <!-- 输出: <div>Hello</div> -->
safe
标记字符串为安全,不再转义。
{{ "<b>Hello</b>" | safe }} <!-- 输出: <b>Hello</b> -->
示例综合应用
假设后端传入的数据为:
data = { "name": "john doe", "tags": ["Python", "Flask", "Jinja2"], "scores": [10, 20, 30], "description": "<p>This is a <b>description</b></p>" }
模板代码:
<p>Name: {{ data.name | title }}</p> <p>Tags: {{ data.tags | join(", ") }}</p> <p>Highest Score: {{ data.scores | max }}</p> <p>Description: {{ data.description | escape }}</p>
渲染结果:
<p>Name: John Doe</p> <p>Tags: Python, Flask, Jinja2</p> <p>Highest Score: 30</p> <p>Description: <p>This is a <b>description</b></p></p>
这些过滤器大大提高了 Jinja2 的灵活性,结合模板变量和逻辑,可以生成强大的动态内容。
本文作者:清澈的澈
本文链接:https://www.cnblogs.com/lmc7/p/18673646
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步