由於在DTL中,不支持函數的調用形式()
,所以不能給函數傳遞參數,這將有很大的侷限性.而過濾器其實就是一個函數,能夠對須要處理的產生進行處理,而且還能夠額外接收一個參數(也就是說,最多隻能有2個參數)javascript
將傳進來的參數添加到原來的值上面。這個過濾器會嘗試將值和參數轉換成整形而後進行相加。若是轉換成整形過程當中失敗了,那麼會將值和參數進行拼接。若是是字符串,那麼會拼接成字符串,若是是列表,那麼會拼接成一個列表。示例代碼以下:html
{{ value|add:"2" }}
若是value是等於4,那麼結果將是6。若是value是等於一個普通的字符串,好比abc,那麼結果將是abc2。add過濾器的源代碼以下:java
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 ''
移除值中全部指定的字符串。相似於python中的replace(args,」「)。示例代碼以下:python
{{ value|cut:" " }}
以上示例將會移除value中全部的空格字符。cut過濾器的源代碼以下:ios
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
過濾器:將
一個日期按照指定的格式,格式化成字符串。示例代碼以下:web
# 數據 context = { "birthday": datetime.now() } # 模版 {{ birthday|date:"Y/m/d" }}
那麼將會輸出2018/02/01
。其中Y
表明的是四位數字的年份,m
表明的是兩位數字的月份,d
表明的是兩位數字的日。
還有更多時間格式化的方式。見下表。django
格式字符 | 描述 | 示例 |
---|---|---|
Y | 四位數字的年份 | 2018 |
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 |
若是值被評估爲False
。好比[]
,""
,None
,{}
等這些在if
判斷中爲False
的值,都會使用default
過濾器提供的默認值。示例代碼以下:api
{{ value|default:"nothing" }}
若是value
是等於一個空的字符串。好比""
,那麼以上代碼將會輸出nothing
。瀏覽器
若是值是None
,那麼將會使用default_if_none
提供的默認值。這個和default
有區別,default
是全部被評估爲False
的都會使用默認值。而default_if_none
則只有這個值是等於None
的時候纔會使用默認值。示例代碼以下:安全
{{ value|default_if_none:"nothing" }}
若是value
是等於""
也即空字符串,那麼以上會輸出空字符串。若是value
是一個None
值,以上代碼纔會輸出nothing
。
返回列表/元組/字符串中的第一個元素。示例代碼以下:
{{ value|first }}
若是value
是等於['a','b','c']
,那麼輸出將會是a
。
返回列表/元組/字符串中的最後一個元素。示例代碼以下:
{{ value|last }}
若是value
是等於['a','b','c']
,那麼輸出將會是c
。
使用四捨五入的方式格式化一個浮點類型。若是這個過濾器沒有傳遞任何參數。那麼只會在小數點後保留一個小數,若是小數後面全是0,那麼只會保留整數。固然也能夠傳遞一個參數,標識具體要保留幾個小數。
value | 模版代碼 | 輸出 |
---|---|---|
34.23234 | {{ value\|floatformat }} |
34.2 |
34.000 | {{ value\|floatformat }} |
34 |
34.260 | {{ value\|floatformat }} |
34.3 |
value | 模版代碼 | 輸出 |
---|---|---|
34.23234 | {{value\|floatformat:3}} |
34.232 |
34.0000 | {{value\|floatformat:3}} |
34.000 |
34.26000 | {{value\|floatformat:3}} |
34.260 |
相似與Python
中的join
,將列表/元組/字符串用指定的字符進行拼接。示例代碼以下:
{{ value|join:"/" }}
若是value
是等於['a','b','c']
,那麼以上代碼將輸出a/b/c
。
獲取一個列表/元組/字符串/字典的長度。示例代碼以下:
{{ value|length }}
若是value
是等於['a','b','c']
,那麼以上代碼將輸出3
。若是value
爲None
,那麼以上將返回0
。
將值中全部的字符所有轉換成小寫。示例代碼以下:
{{ value|lower }}
若是value
是等於Hello World
。那麼以上代碼將輸出hello world
。
相似於lower
,只不過是將指定的字符串所有轉換成大寫。
在被給的列表/字符串/元組中隨機的選擇一個值。示例代碼以下:
{{ value|random }}
若是value
是等於['a','b','c']
,那麼以上代碼會在列表中隨機選擇一個。
標記一個字符串是安全的。也即會關掉這個字符串的自動轉義。示例代碼以下:
{{value|safe}}
若是value
是一個不包含任何特殊字符的字符串,好比<a>
這種,那麼以上代碼就會把字符串正常的輸入。若是value
是一串html
代碼,那麼以上代碼將會把這個html
代碼渲染到瀏覽器中。
相似於Python
中的切片操做。示例代碼以下:
{{ some_list|slice:"2:" }}
以上代碼將會給some_list
從2
開始作切片操做。
刪除字符串中全部的html
標籤。示例代碼以下:
{{ value|striptags }}
若是value
是<strong>hello world</strong>
,那麼以上代碼將會輸出hello world
。
若是給定的字符串長度超過了過濾器指定的長度。那麼就會進行切割,而且會拼接三個點來做爲省略號。示例代碼以下:
{{ value|truncatechars:5 }}
若是value
是等於北京歡迎您~
,那麼輸出的結果是北京...
。可能你會想,爲何不會北京歡迎您...
呢。由於三個點也佔了三個字符,因此北京
+三個點的字符長度就是5。
相似於truncatechars
,只不過是不會切割html
標籤。示例代碼以下:
{{ value|truncatechars:5 }}
若是value
是等於<p>北京歡迎您~</p>
,那麼輸出將是<p>北京...</p>
。