Django模板过滤器

在模板中,有时需要对一些数据进行处理后才能使用。可以通过过滤器|来操作,最多只能传递两个参数。如add过滤器

{{ value|add:"2" }} # add(value, "2")

常用过滤器

add

将传入的参数添加到原来的值上面。它会尝试将参数转换成整形进行相加。如果转换失败,那么会将参数拼接。如果是字符串,拼接成字符串;如果是列表,拼接成列表。

# add过滤器源码
def add(value, arg):
"""Add the arg to the value"""
try:
return int(value) + int(arg)
except (ValueError, TypeError):
try:
return value + arg
except Exception:
return ''

cut

移除值中所有指定字符串。类似python中的replace(args, "")

{{ value|cut:" " }} # 移除所有value中的空格字符
def cut(value, arg):
"""Remove all values of arg from the given string."""
safe = isinstance(value, SafeData)
value = value.replace(arg, '')
if safe and arg != ';':
return mark_safe(value)
return value

date

将一个日期按照指定的格式,格式化成字符串

# 数据
context = {
"birthday": datetime.now()
}

# 模板
{{ birthday|date:"Y/m/d" }}

将会输出2019/09/01

格式字符 描述 示例
Y 四位数字的年份 2019
m 两位数字的月份 01-12
n 月份,1-9前没有0前缀 1-12
d 两位数字的天 01-31
j 天,1-9前没有0前缀 1-31
g 小时,12小时格式,1-9前没有0前缀 1-12
h 小时,12小时格式,1-9前有0前缀 01-12
G 小时,24小时格式,1-9前没有0前缀 1-23
H 小时,24小时格式,1-9前有0前缀 01-23
i 分钟,1-9前有0前缀 00-59
s 秒,1-9前有0前缀 00-59

default

如果值被评估为False。如[], "", None, {}等在if判断中为False的值,都会使用default`过滤器提供的默认值。

{{ value|default:"nothing" }}

default_if_none

如果值是None,将会使用default_if_none提供的默认值。

{{ value|default_if_none:"nothing" }}

只有valueNone时,会渲染成nothing

first

返回列表/元组/字符串中的第一个元素。

{{ value|first }}

value = ['a', 'b', 'c'],输出为a

last

返回列表/元组/字符串中的最后一个元素

{{ value|last }}

value = ['a', 'b', 'c'],输出为c

floatformat

使用四舍五入方式格式化一个浮点类型。

1.没有传递参数

46.2345	46.2
46.000 46
46.370 46.4

2.传递参数
保留三位

34.23234	34.232
34.0000 34.000
34.26000 34.260

join

类似Python中的join,将列表/元组/字符串用指定的字符串进行拼接

{{ value|join:"/" }}

value = ['a', 'b', 'c'],输出a/b/c

length

获取列表/元组/字符串/字典的长度

{{ value|length }}

lower

将值中的所有字符全部转换成小写

{{ value|lower }}

upper

将值中所有的字符全部转换成大写

{{ value|upper }}

random

从列表/元组/字符串中随机选择一个值

{{ value|random }}

safe

标记一个字符串是安全的,会关掉这个字符串的自动转义

{{ value|safe }}

如果value是一个不包含任何特殊字符串的字符串,如<a>,会把<a>正常输入。如果value是一串html,会把这个html渲染到浏览器中。

slice

类似Python中的切片操作

{{ some_list|slice:"2:" }}

some_list2开始做切片操作

striptags

删除字符串中的所有html标签

{{ value|striptags}}

value = <strong>hello world</strong>,输出hello world

truncatechars

切割字符串,多余的用…代替

{{ value|truncatechars:5 }}

value = hello world,输出he......也算字符长度

truncatechars_html

类似truncatechars,但不会切割html标签

{{ value|truncatechars:5 }}

value = <p>hello world</p>,输出<p>he...</p>

自定义过滤器

from django import template

register = template.Library()

@register.filter
def custom_filter():
...