📌 用户提问
jinja2 过滤器
🤖 Ai 回答
Jinja2 是一个用于 Python 的模板引擎,广泛用于 Web 开发中(如 Flask 框架)。它提供了一种方式来动态生成 HTML、XML 或其他文本格式。过滤器(Filters) 是 Jinja2 中非常重要的功能之一,它们允许你在模板中对变量进行处理和转换。
✅ 什么是 Jinja2 过滤器?
过滤器是作用于变量上的函数,可以对变量进行各种操作,比如格式化字符串、转换大小写、截断文本、排序列表等。
语法:
jinja
{{ variable|filter_name }}
📌 常见的 Jinja2 过滤器
| 过滤器 | 说明 | 示例 |
|--|||
| `safe` | 将字符串标记为“安全”,避免自动转义 | `{{ user_html|safe }}` |
| `lower` | 转换为小写 | `{{ HELLO|lower }}` → `hello` |
| `upper` | 转换为大写 | `{{ hello|upper }}` → `HELLO` |
| `title` | 首字母大写 | `{{ hello world|title }}` → `Hello World` |
| `capitalize` | 首字母大写(仅第一个字符) | `{{ hello world|capitalize }}` → `Hello world` |
| `trim` | 去除两端空格 | `{{ hello |trim }}` → `hello` |
| `striptags` | 移除 HTML 标签 | `{{ <b>Hello</b>|striptags }}` → `Hello` |
| `length` | 获取长度 | `{{ hello|length }}` → `5` |
| `default` | 设置默认值 | `{{ name|default(Anonymous) }}` |
| `int` | 转换为整数 | `{{ 123|int }}` → `123` |
| `float` | 转换为浮点数 | `{{ 3.14|float }}` → `3.14` |
| `string` | 转换为字符串 | `{{ 123|string }}` → `123` |
| `urlencode` | URL 编码 | `{{ hello world|urlencode }}` → `hello%20world` |
| `urldecode` | URL 解码 | `{{ hello%20world|urldecode }}` → `hello world` |
| `sort` | 排序(适用于列表) | `{{ [3,1,2]|sort }}` → `[1, 2, 3]` |
| `reverse` | 反转(字符串或列表) | `{{ hello|reverse }}` → `olleh` |
| `join` | 用分隔符连接元素(常与列表一起使用) | `{{ [a, b, c]|join(, ) }}` → `a, b, c` |
| `replace` | 替换字符串中的内容 | `{{ hello|replace(l, x) }}` → `hexxo` |
| `split` | 分割字符串 | `{{ a,b,c|split(,) }}` → `[a, b, c]` |
| `first` | 获取第一个元素 | `{{ [1,2,3]|first }}` → `1` |
| `last` | 获取最后一个元素 | `{{ [1,2,3]|last }}` → `3` |
🔧 自定义过滤器(在 Flask 中)
如果你使用的是 Flask,你可以通过 `app.jinja_env.filters` 注册自定义过滤器:
python
from flask import Flask
app = Flask(__name__)
@app.template_filter('custom_filter')
def custom_filter(value):
return value + (modified)
if __name__ == '__main__':
app.run()
然后在模板中使用:
jinja
{{ hello|custom_filter }}
输出:
hello (modified)
📘 总结
过滤器 是对变量进行处理的函数。
它们以 `|filter_name` 的形式出现在模板中。
Jinja2 提供了许多内置过滤器,也支持自定义过滤器。
使用得当,可以让模板更简洁、灵活。
如果你有具体的使用场景(比如如何格式化日期、处理 HTML 等),我可以给出更详细的示例!
✅ 什么是 Jinja2 过滤器?
过滤器是作用于变量上的函数,可以对变量进行各种操作,比如格式化字符串、转换大小写、截断文本、排序列表等。
语法:
jinja
{{ variable|filter_name }}
📌 常见的 Jinja2 过滤器
| 过滤器 | 说明 | 示例 |
|--|||
| `safe` | 将字符串标记为“安全”,避免自动转义 | `{{ user_html|safe }}` |
| `lower` | 转换为小写 | `{{ HELLO|lower }}` → `hello` |
| `upper` | 转换为大写 | `{{ hello|upper }}` → `HELLO` |
| `title` | 首字母大写 | `{{ hello world|title }}` → `Hello World` |
| `capitalize` | 首字母大写(仅第一个字符) | `{{ hello world|capitalize }}` → `Hello world` |
| `trim` | 去除两端空格 | `{{ hello |trim }}` → `hello` |
| `striptags` | 移除 HTML 标签 | `{{ <b>Hello</b>|striptags }}` → `Hello` |
| `length` | 获取长度 | `{{ hello|length }}` → `5` |
| `default` | 设置默认值 | `{{ name|default(Anonymous) }}` |
| `int` | 转换为整数 | `{{ 123|int }}` → `123` |
| `float` | 转换为浮点数 | `{{ 3.14|float }}` → `3.14` |
| `string` | 转换为字符串 | `{{ 123|string }}` → `123` |
| `urlencode` | URL 编码 | `{{ hello world|urlencode }}` → `hello%20world` |
| `urldecode` | URL 解码 | `{{ hello%20world|urldecode }}` → `hello world` |
| `sort` | 排序(适用于列表) | `{{ [3,1,2]|sort }}` → `[1, 2, 3]` |
| `reverse` | 反转(字符串或列表) | `{{ hello|reverse }}` → `olleh` |
| `join` | 用分隔符连接元素(常与列表一起使用) | `{{ [a, b, c]|join(, ) }}` → `a, b, c` |
| `replace` | 替换字符串中的内容 | `{{ hello|replace(l, x) }}` → `hexxo` |
| `split` | 分割字符串 | `{{ a,b,c|split(,) }}` → `[a, b, c]` |
| `first` | 获取第一个元素 | `{{ [1,2,3]|first }}` → `1` |
| `last` | 获取最后一个元素 | `{{ [1,2,3]|last }}` → `3` |
🔧 自定义过滤器(在 Flask 中)
如果你使用的是 Flask,你可以通过 `app.jinja_env.filters` 注册自定义过滤器:
python
from flask import Flask
app = Flask(__name__)
@app.template_filter('custom_filter')
def custom_filter(value):
return value + (modified)
if __name__ == '__main__':
app.run()
然后在模板中使用:
jinja
{{ hello|custom_filter }}
输出:
hello (modified)
📘 总结
过滤器 是对变量进行处理的函数。
它们以 `|filter_name` 的形式出现在模板中。
Jinja2 提供了许多内置过滤器,也支持自定义过滤器。
使用得当,可以让模板更简洁、灵活。
如果你有具体的使用场景(比如如何格式化日期、处理 HTML 等),我可以给出更详细的示例!
👍 点赞
0
204
🔍 搜索次数
188.211.240.57
🌐 IP地址
2025-05-11 19:00:14
📅 提问时间
🏷️ 相关产品
📸 产品展示
📞 联系我们
📱 扫码添加微信客服