997
社区成员
这是我参加朝闻道知识分享大赛的第11篇文章
default
过滤器使用方式: {{ value|default('默认值') }}
如果 value
不存在,则使用 default
过滤器提供的默认值。
如果要判断 value
是否为 False
(如 None
、空字符串、空列表、空字典等),需传递 boolean=True
参数:{{ value|default('默认值', boolean=True) }}
。
可以用 or
替代 default('默认值', boolean=True)
,例如:{{ signature or '此人很懒,没有留下任何说明' }}
。
safe
过滤器: 关闭字符串的自动转义。
escape
过滤器: 对字符串进行转义。
autoescape
标签: 控制代码块的自动转义开关。
jinja
复制
{% autoescape off/on %} ...代码块 {% endautoescape %}
first(value)
: 返回序列的第一个元素。
示例: names|first
format(value, *args, **kwargs)
: 格式化字符串。
示例: {{ "%s - %s"|format('Hello?', "Foo!") }}
输出: Hello? - Foo!
last(value)
: 返回序列的最后一个元素。
示例: names|last
length(value)
: 返回序列或字典的长度。
示例: names|length
join(value, d=u'')
: 用 d
参数的值拼接序列成字符串。
示例: names|join(', ')
safe(value)
: 如果开启了全局转义,safe
过滤器会关闭变量的转义。
示例: content_html|safe
int(value)
: 将值转换为 int
类型。
示例: price|int
float(value)
: 将值转换为 float
类型。
示例: price|float
lower(value)
: 将字符串转换为小写。
示例: name|lower
upper(value)
: 将字符串转换为大写。
示例: name|upper
replace(value, old, new)
: 将字符串中的 old
替换为 new
。
示例: text|replace('old', 'new')
truncate(value, length=255, killwords=False)
: 截取指定长度的字符串。
示例: text|truncate(50)
striptags(value)
: 删除字符串中的所有 HTML 标签,多个空格替换为一个空格。
示例: html_content|striptags
trim
: 截取字符串前后的空白字符。
示例: text|trim
string(value)
: 将变量转换为字符串。
示例: number|string
wordcount(s)
: 计算长字符串中的单词个数。
示例: text|wordcount
过滤器本质上是一个函数。
模板中调用过滤器时,变量的值会作为第一个参数传给过滤器函数,函数的返回值作为过滤器的返回值。
cut
过滤器@app.template_filter('cut') def cut(value): value = value.replace("hello", '') return value
@app.template_filter('li_time') def li_time(time): if isinstance(time, datetime): now = datetime.now() li = (now - time).total_seconds() if li < 60: return "刚刚" elif li >= 60 and li < 60 * 60: return f"{int(li / 60)}分钟前" elif li >= 60 * 60 and li < 60 * 60 * 24: return f"{int(li / (60 * 60))}小时前" else: return time.strftime("%Y-%m-%d") else: return time
Jinja2 提供了丰富的内置过滤器,同时也支持自定义过滤器,使得模板渲染更加灵活和强大。通过合理使用过滤器,可以大大简化模板中的逻辑处理,提高代码的可读性和可维护性