DTL
中,不支持函数的调用形式()
,因此不能给函数传递参数。可以通过过滤器来实现,过滤器本身实现就是函数。过滤器使用的是|
传参可以只有一个参数(左边):
和arg之间不能有空格
{# 常用的add过滤器 #}
{{ value|add:arg }}
{# 等同于add(value ,arg) #}
param
和value
转换成为整型然后进行相加。如果转换整型过程中失败(抛出异常),则将param
和value
进行拼接。如果两者都是字符串,那么就会拼接成字符串,如果都是列表,则会拼接为列表。{{ value|add:arg }}
如果value
是4,arg
是2
,则结果为数字6.如果是字符串比如jack
,则结果为jack2
源代码如下:
def add(value, arg):
# Add the arg to the value.
try:
return int(value) + int(arg)
excpet (ValueError, TypeError):
try:
return value + arg
except Exception:
return ''
实例代码:
#urls.py
path('add/', views.add_filter)
# views.py
def add_filter(request):
context = {
"value1": [1, 2, 3, "a", [1, 2, 3]],
"value2": ["aa", "bb", {"param": "value"}]
}
return render(request, "add.html", context=context)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>过滤器add调用title>
head>
<body>
<h1>
{{ value1 |add:value2 }}
h1>
body>
html>
replace(args,"")
:
和arg之间不能有空格
{{ 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
实例代码
# urls.py
path('cut/', views.cut_filter)
# views.py
def cut_filter(request):
return render(request, "cut.html")
<html lang="en">
<head>
<meta charset="UTF-8">
<title>cut过滤器title>
head>
<body>
<h2>
{{ "hello"|cut:"l" }}
h2>
body>
html>
将一个日期按照指定的格式,格式为字符串。
{{ day|date:"格式字符串“ }}
时间格式化表:
格式字符 | 描述 | 示例 |
---|---|---|
Y | 四位数字的年份 | 2019 |
m | 两位数字的月份 | 01-12 |
d | 两位数字的天数 | 01-31 |
n | 月份,无0前缀 | 1-12 |
j | 天数,无0前缀 | 1-31 |
h | 小时,12小时制,有0前缀 | 01-12 |
g | 小时,12小时制,无0前缀 | 1-12 |
H | 小时,24小时制,有0前缀 | 01-24 |
G | 小时,24小时制,无0前缀 | 1-24 |
i | 分钟,有0前缀 | 00-59 |
s | 秒,有0前缀 | 00-59 |
实例
# urls.py
path('date/', views.date_filter),
# views.py
def date_filter(request):
context = {
"day": datetime.now()
}
return render(request, "date.html", context=context)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>datetitle>
head>
<body>
<h3>
{{ day|date:"Y/n/j g:i:s" }}
h3>
body>
html>
如果value
是一个Flase的值,比如[]
{}
,None
,""
等在if
中被认为是False
的值,可以使用default够氯气提供的默认值arg
{{ value|default:arg }}
如果value
为None
,arg
为no value
,则模板显示为no value
仅仅当value
为None
才会使用arg
的值
{{ value|default_if_none:args }}
返回列表/元组/字符串的第一个元素
{{ value|first }}
如果value
等于"abc"
, 模板显示a
返回列表/元组/字符串的最后一个元素
{{ value|last }}
如果value
等于["a", "b",]
,模板显示b
四舍五入的方式格式化一个浮点数类型
如果这个过滤器没有传递任何参数
只会保留一个小数
若小数全为0,则只保留整数
如果传递参数,则标识具体要保留几个小数
实例
# urls.py
path('floatformat/', views.floatformat_filter),
# views.py
def floatformat_filter(request):
context = {
"value11": 3.123,
"value12": 3.193,
"value13": 3.000,
"value21": 3.1415926,
"value22": 3.1415926,
"value23": 3.1415926,
}
return render(request, "floatformat.html", context=context)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>floatformattitle>
head>
<body>
<h4>
{{ value11|floatformat }}
<br>
{{ value12|floatformat }}
<br>
{{ value13|floatformat }}
<br>
h4>
<h4>
{{ value21|floatformat:0 }}
<br>
{{ value22|floatformat:1 }}
<br>
{{ value23|floatformat:2 }}
<br>
h4>
body>
html>
类似python的join
,将列表/元组/字符串用指定的字符进行拼接
{{ value|join:'+' }}
如果value
是"abc"
,则模板输出为a+b+c
实例
# urls.py
path('join/', views.join_filter),
# views.py
def join_filter(request):
context = {
"value": "abc",
}
return render(request, "join.html", context=context)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jointitle>
head>
<body>
{{ value|join:'+' }}
body>
html>
运行
获取一个列表/元组/字符串/字典的长度。
{{ value|length }}
value
为None
,则返回0
将值中所有的字符全部转换为小写
{{ value|lower }}
将值中所有的字符转换为大写
{ value|upper }
在被给的列表/字符串/元组中随机的选择一个值
{{ value|random }}
标记一个字符串是安全的。也就是会关掉这个字符串的自动转义。类似模板标签中的{% autoescape off %}
{{ value|sage }}
如果value
是一个不包含任何特殊字符的字符串,会正常输出字符串
如果是一串html
代码,那么会safe过滤器就将这串代码作为html
代码输出
实例
# urls.py
path('safe/', views.safe_filter),
# views.py
def safe_filter(request):
context = {
"normal": "原样字符串aaa
",
"url": "百度",
}
return render(request, "safe.html", context=context)
{# safe.html #}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>safetitle>
head>
<body>
<h4>
{{ normal|safe }}
<br>
{{ url|safe }}
h4>
body>
html>
运行
类似python中的切片操作
{{ a_list|slice:"切片格式" }}
比如a_list
是[1,2,3,4,]
,"切片格式"
是[::-]
,则模板输出为[4,3,2,1]
删除字符串中所有的html
标签。
{{ value|striptags }}
如果value
是
,那么模板输出为 jack
jack
如果给定的字符串长度超过了过滤器指定的长度。那么会进行切割,并且拼接三个点来作为省略号
注意三个点也算在指定的长度里面,算三个字符
{{ value|truncatechar:number }}
会忽略字符串中的html
标签,其他同truncatechars