Django 提供了大约 60 个内置的模板过滤器。参见内置过滤器参考
{{ 变量名 | 过滤器:可选参数 }}
{{ 变量名 | 过滤器:可选参数 | 过滤器:可选参数 }}
{{ Hulu|add:"2"}}
,将 字符串 的值加2
或者两个 列表 相加
{{ Hulu|addslashes}}
,在 字符串 中的引号前添加斜杠。如果Hulu是"I'm Hulu"
,输出是"I\'m Hulu"
{{ Hulu|center:"15" }
,在给定宽度的字段中使字符串居中
{{ Hulu|cut:"u" }}
,将 字符串 中删除参数的所有值,输出为Hl
{{ pub_date|date:"Y-m-d"}}
,格式化 日期,输出为2024-05-20
{{ Hulu|default:"Hulu" }}
,如果值为 False, 0, 0.0, (), [], ""
,则使用给定的默认值。否则使用该值。
{{ Hulu|default:"Hulu" }}
,如果值为 None
,则使用给定的默认值。否则使用该值。 注意如果给定一个空字符串,将不会使用默认值。如果你想使用空字符串,请使用 default
过滤器
{{ Hulu|dictsort:"name" }}
,获取一个 字典列表,并按照参数中给出的键排序返回该列表
{{ Hulu|dictsort:"name" }}
,获取一个 字典列表,并按照参数中给出的键反向排序返回该列表
{{ Hulu|lower }}
将 字符串 转换为小写,输出为hulu
{{ Hulu|filesizeformat }}
,以 “人类可读” 的文件大小为格式,如 13 KB
、4.1 MB
、102 bytes
{{ Hulu|upper }}
将 字符串 转换为大写,输出为HULU
{{Hulu|first}}
,返回 列表 的第一个项目
{{Hulu|last}}
,返回 列表 的最后一个项目
{{Hulu|floartformat:3}}
,将 浮点数 四舍五入到小数点后参数值的位数,如果没有填参数则为小数点后一位
{{ Hulu|iriencode }}
,将 IRI(国际化资源标识符)转换为适合包含在 URL 中的字符串。如果你想在 URL 中使用包含非 ASCII 字符的字符串,这一点是必要的。
{{ Hulu|join:" // " }}
,用字符串连接一个列表,如果Hulu=['a','b','c']
,输出为a//b//c
{{ Hulu|slice: "2" }}
,返回 列表 的一个片段
{{ Hulu|safe }}
,标记一个字符串在输出前不需要进一步的 HTML 转义
{{ Hulu|length }}
,将显示 列表或者字符串 的长度,输出为4
{{ Hulu|linenumbers }}
,将显示带有行号的文本
{{ Hulu|random }}
,从 列表 中随机返回一个项目
注意:过滤变量的类型
如果传给过滤器的数据类型不符合预期,可能会导致异常或未定义的行为。开发者能通过 Python 代码自定义
filters
扩展集成模板引擎,通过{% load %}
标签使其可用。
自定义过滤器参见官方文档
templatetags
目录定制自定义 filters
的位置就是 Django 应用内。如果它们关联至某个已存在的应用,在那里将它们打包就很有用;否则,它们能被添加至新应用。当一个 Django 应用被添加至 INSTALLED_APPS,所以其在常规位置(下面介绍)定义的过滤器都可以在模板中自动加载。
该应用应包含一个 templatetags
目录,与 models.py
, views.py
等同级。若该目录不存在,创建它——不要忘了用__init__.py
文件确保目录被视作一个 Python 包
。
如果你的自定义标签/过滤器位于一个名为 `poll_extras.py` 的文件中,你的应用程序布局可能如下所示:
```
polls/
| __init__.py
| models.py
| templatetags/
| |-- __init__.py
| |-- poll_extras.py
|-- views.py
```
在poll_extras.py
文件中,你应该输入以下内容:
from django import template
register = template.Library()
例如poll_extras.py
文件中在实现一个添加字符的自定义标签,和一个乘法的过滤器:
# 注册自定义简单标签
@register.simple_tag
def addstr_tag(strs):
return 'hulu'%strs
# 注册自定义过滤器
@register.filter
def multiply(value, arg):
return value * arg
# 如果只接收一个字符串作为第一个参数的模板过滤器,你需要使用 stringfilter 的装饰器
from django.template.defaultfilters import stringfilter
@register.filter
@stringfilter
def lower(value):
return value.lower()
在模板中使用以下代码:
{% load poll_extras %}
{% addstr_tag 'is cool' %}
{% 5|multiply: 8 %}
输出结果:
hulu is cool
40