在 Django 中,模板过滤器是一种用于对模板变量进行处理和格式化的工具。过滤器允许你在模板中对变量进行修改,从而在渲染过程中实现一些常见的操作,如字符串格式化、日期处理、数据筛选等。过滤器通过 |
符号附加在变量后面,具有一定的语法结构,用于传递变量并执行特定的操作。
语法
在模板中使用过滤器的语法为:
{{ variable|filter }}
用法和作用
- 格式化数据: 过滤器用于对模板变量进行格式化,如将日期格式化、字符串转换为大写或小写、数值格式化等。
- 数据筛选: 可以使用过滤器对数据进行筛选,例如截取字符串、获取列表的某个元素、移除HTML标签等。
- 数据转换: 可以将数据转换成其他数据类型,如将字符串转换为整数、将浮点数保留指定小数位等。
使用场景
过滤器在 Django 模板中非常常见,常用于以下场景:
- 格式化显示日期和时间
- 处理文本内容,如截断文本、转换大小写等
- 数字格式化显示
- 数据筛选和操作
常用过滤器
下面列举一些常见的 Django 过滤器,并结合详细的代码示例进行叙述:
date
date:格式化日期。
<!-- 在 models.py 中定义一个日期字段:pub_date = models.DateTimeField(auto_now_add=True) -->
<!-- 在模板中使用过滤器显示格式化后的日期 -->
{{ object.pub_date|date:"Y-m-d" }}
<!-- 示例结果:2023-07-27 -->
lower 和 upper
转换字符串为小写和大写。
<!-- 假设 context 中有一个变量 message = "Hello, Django!" -->
<!-- 使用 lower 过滤器将字符串转换为小写 -->
{{ message|lower }}
<!-- 示例结果:hello, django! -->
<!-- 使用 upper 过滤器将字符串转换为大写 -->
{{ message|upper }}
<!-- 示例结果:HELLO, DJANGO! -->
length
获取列表或字符串的长度。
<!-- 假设 context 中有一个变量 my_list = [1, 2, 3, 4, 5] -->
<!-- 使用 length 过滤器获取列表的长度 -->
{{ my_list|length }}
<!-- 示例结果:5 -->
slice
切片操作,截取列表或字符串的一部分。
<!-- 假设 context 中有一个变量 my_list = [1, 2, 3, 4, 5] -->
<!-- 使用 slice 过滤器截取列表的前三个元素 -->
{{ my_list|slice:":3" }}
<!-- 示例结果:[1, 2, 3] -->
<!-- 假设 context 中有一个变量 my_string = "Hello, Django!" -->
<!-- 使用 slice 过滤器截取字符串的前五个字符 -->
{{ my_string|slice:":5" }}
<!-- 示例结果:Hello -->
default
设置默认值。
<!-- 假设 context 中有一个变量 username,但该变量可能未定义 -->
<!-- 使用 default 过滤器设置默认值 -->
{{ username|default:"Guest" }}
<!-- 如果 username 存在,则输出其值;如果 username 不存在,则输出默认值 "Guest" -->
join
将列表转换为字符串,并用指定的字符连接各元素。
<!-- 假设 context 中有一个变量 my_list = ["apple", "banana", "orange"] -->
<!-- 使用 join 过滤器将列表转换为字符串,并用逗号连接各元素 -->
{{ my_list|join:", " }}
<!-- 示例结果:apple, banana, orange -->
全部模板过滤器
上面列出的只是一部分常见的 Django 过滤器,实际上 Django 还提供了许多其他有用的过滤器供开发者使用。在使用过滤器时,建议查阅 Django 官方文档以及相关的第三方包文档,以充分了解过滤器的功能和用法。
以下列出了全部的模板过滤器:
过滤器 | 作用 |
---|---|
add | 对数据进行加法运算。 |
addslashes | 添加反斜杠在特定字符前面。 |
capfirst | 字符串的第一个字符转换为大写。 |
center | 字符串居中对齐。 |
cut | 从字符串中删除指定的子字符串。 |
date | 格式化日期和时间对象。 |
default | 设置一个默认值。 |
default_if_none | 变量不存在时提供一个默认值。 |
dictsort | 按照字典的键或值对一个字典进行排序。 |
dictsortreversed | 按照键值逆序排列。 |
divisibleby | 按照键值逆序排列。 |
escape | 安全地显示用户提供的数据。 |
escapejs | 对 JavaScript 代码进行转义。 |
filesizeformat | 格式化文件大小。 |
first | 获取第一个元素。 |
floatformat | 格式化浮点数。 |
force_escape | 强制转义。 |
get_digit | 从给定的整数中获取指定位置上的数字。 |
iriencode | 转换特殊字符和空格。 |
join | 连接元素成字符串。 |
json_script | 嵌入脚本。 |
last | 返回一个可迭代对象的最后一个元素。 |
length | 获取变量的长度或者元素数量。 |
length_is | 判断对象的长度是否等于指定值。 |
linebreaks | 处理换行符。 |
linebreaksbr | 换行符转换。 |
linenumbers | 添加行号。 |
ljust | 对字符串进行格式化。 |
lower | 字符串转换为小写形式。 |
make_list | 将字符串转换为列表。 |
phone2numeric | 将电话号码中的字母转换成对应的数字。 |
pluralize | 根据数量的不同选择正确的单复数形式。 |
pprint | 美化输出数据。 |
random | 随机选择列表中的元素。 |
rjust | 字符串向右对齐。django-template-filter-capfirst.html |
safe | 安全设置。 |
safeseq | 列表元组等集合类型安全设置。 |
slice | 列表字符串切片。 |
slugify | 文本转换为适合在 URL 中使用的 slug 形式。 |
stringformat | 对变量格式化处理。 |
striptags | 显示纯文本内容。 |
time | 改变时间的显示方式。 |
timesince | 显示时间距离当前时间的相对时间。 |
timeuntil | 计算给定日期或时间与当前时间之间的时间差。 |
title | 字符串每个单词的首字母变为大写。 |
truncatechars | 截断字符串并添加省略号。 |
truncatechars_html | 截断包含 HTML 标签的文本内容。 |
truncatewords | 文本截断。 |
truncatewords_html | 在 HTML 文本中截取一定数量的单词。 |
unordered_list | 列表渲染成无序列表。 |
upper | 字符串转换为大写形式。 |
urlencode | 对 URL 中的参数进行编码。 |
urlize | 将文本中的 URLs(网址)转换为可点击的链接。 |
urlizetrunc | 包含 URL 的文本进行截断和格式化。 |
wordcount | 计算字符串中包含的单词数量。 |
wordwrap | 自动将长文本进行换行处理。 |
yesno | 根据布尔值显示自定义的字符串。 |
i18n | 处理国际化内容。 |
l10n | 处理本地化内容。 |
tz | 处理与时区相关的操作。 |