Django2.0-templates(4)-模版過濾器
模板常用過濾器
- 有時候需要對模板中的一些資料進行處理。一般是通過函式的形式來完成,而在
DTL
中,不支援函式的呼叫形式()
,因此不能給函式傳遞引數。可以通過過濾器來實現,過濾器本身實現就是函式。過濾器使用的是|
傳參可以只有一個引數(左邊)
:
和arg之間不能有空格
{# 常用的add過濾器 #}
{{ value|add:arg }}
{# 等同於add(value ,arg) #}
add
- 將傳進來的引數新增到原來的值上面去。這個過濾器會嘗試將
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)
<!-- add.html --> <!DOCTYPE html>
-
執行
-
cut
- 移除值中所有指定的字串。類似python中的
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")
<!-- cut.html--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>cut過濾器</title> </head> <body> <h2> {{ "hello"|cut:"l" }} </h2> </body> </html>
date
-
將一個日期按照指定的格式,格式為字串。
{{ 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)
<!-- date.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>date</title>
</head>
<body>
<h3>
{{ day|date:"Y/n/j g:i:s" }}
</h3>
</body>
</html>
-
執行
default
如果value
是一個Flase的值,比如[]
{}
,None
,""
等在if
中被認為是False
的值,可以使用default夠氯氣提供的預設值arg
{{ value|default:arg }}
如果value
為None
,arg
為no value
,則模板顯示為no value
default_if_none
僅僅當value
為None
才會使用arg
的值
{{ value|default_if_none:args }}
first
返回列表/元組/字串的第一個元素
{{ value|first }}
如果value
等於"abc"
, 模板顯示a
last
返回列表/元組/字串的最後一個元素
{{ value|last }}
如果value
等於["a", "b",]
,模板顯示b
floatformat
四捨五入的方式格式化一個浮點數型別
-
如果這個過濾器沒有傳遞任何引數
-
只會保留一個小數
-
若小數全為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)
<!-- floatformat.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>floatformat</title>
</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>
-
執行
join
類似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)
<!-- join.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>join</title> </head> <body> {{ value|join:'+' }} </body> </html>
-
執行
length
獲取一個列表/元組/字串/字典的長度。
{{ value|length }}
value
為None
,則返回0
lower
將值中所有的字元全部轉換為小寫
{{ value|lower }}
upper
將值中所有的字元轉換為大寫
{ value|upper }
random
在被給的列表/字串/元組中隨機的選擇一個值
{{ value|random }}
safe
標記一個字串是安全的。也就是會關掉這個字串的自動轉義。類似模板標籤中的{% autoescape off %}
{{ value|sage }}
如果value
是一個不包含任何特殊字元的字串,會正常輸出字串
如果是一串html
程式碼,那麼會safe過濾器就將這串程式碼作為html
程式碼輸出
-
例項
# urls.py path('safe/', views.safe_filter),
# views.py def safe_filter(request): context = { "normal": "原樣字串<h1>aaa</h1>", "url": "<a href='http://www.baidu.com'>百度</a>", } return render(request, "safe.html", context=context)
{# safe.html #} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>safe</title> </head> <body> <h4> {{ normal|safe }} <br> {{ url|safe }} </h4> </body> </html>
-
執行
slice
類似python中的切片操作
{{ a_list|slice:"切片格式" }}
比如a_list
是[1,2,3,4,]
,"切片格式"
是[::-]
,則模板輸出為[4,3,2,1]
striptags
刪除字串中所有的html
標籤。
{{ value|striptags }}
如果value
是<h1> jack </h1>
,那麼模板輸出為jack
truncatechars
如果給定的字串長度超過了過濾器指定的長度。那麼會進行切割,並且拼接三個點來作為省略號
注意三個點也算在指定的長度裡面,算三個字元
{{ value|truncatechar:number }}
truncatechars_html
會忽略字串中的html
標籤,其他同truncatechars