## Django模板語言,過濾器整理
#### 1. add
**{{ value|add:"2" }}**
把add后的參數加給value;
處理時,過濾器首先會強制把兩個值轉換成Int類型。 如果強制轉換失敗, 它會試圖使用各種方式吧兩個值相加。
> 實例:
>
> {{ arg|add:val }}
>
> 1)arg是5,val是3,將會輸出8
>
> 2)arg是5,val是'3',將會輸出8
>
> 3)arg是'jason',val是'2',將會輸出jason2
>
> 4)arg是'jason',val是2,將會輸出空
>
> 5)arg是[1, 2, 3],val是[4],將會輸出[1, 2, 3, 4]
#### 2. addslashes
{{ value|addslashes }}
在引號前面加上斜桿
像這樣:
如果`value` 是 `"I'm using Django"`, 輸出將變成 `"I\'m using Django"`
#### 3. capfirst
{{ value|capfirst}}
將變量的第一個字母變成大寫,如果第一個字符不是字母,則過濾器不生效
如果 `"value"` 是 `"django"`, 輸出將變成 `Django`。
#### 4. center
{{ value|center:16}}
使"value"在給定的寬度范圍內居中。
#### 5. cut
移除value中所有的與給出的變量相同的字符串
{{ value|cut:" "}}
如果`value`為`“String with spaces”`,輸出將為`"Stringwithspaces"`。
#### 6. date
根據給定格式對一個date變量格式化
可用的格式字符串:
| 格式化字符 | 描述 | 示例輸出 |
| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| a | `'a.m.'`或`'p.m.'`(請注意,這與PHP的輸出略有不同,因為這包括符合Associated Press風格的期間) | `'a.m.'` |
| A | `'AM'`或`'PM'`。 | `'AM'` |
| b | 月,文字,3個字母,小寫。 | `'jan'` |
| B | 未實現。 | |
| c | ISO 8601格式。 (注意:與其他格式化程序不同,例如“Z”,“O”或“r”,如果值為naive datetime,則“c”格式化程序不會添加時區偏移量(請參閱[`datetime.tzinfo`](https://docs.python.org/3/library/datetime.html#datetime.tzinfo)) 。 | `2008-01-02T10:30:00.000123+02:00`或`2008-01-02T10:30:00.000123`如果datetime是天真的 |
| d | 月的日子,帶前導零的2位數字。 | `'01'`到`'31'` |
| D | 一周中的文字,3個字母。 | `“星期五”` |
| e | 時區名稱 可能是任何格式,或者可能返回一個空字符串,具體取決於datetime。 | `''`、`'GMT'`、`'-500'`、`'US/Eastern'`等 |
| E | 月份,特定地區的替代表示通常用於長日期表示。 | `'listopada'`(對於波蘭語區域,而不是`'Listopad'`) |
| f | 時間,在12小時的小時和分鍾內,如果它們為零,則分鍾停留。 專有擴展。 | `'1'`,`'1:30'` |
| F | 月,文,長。 | `'一月'` |
| g | 小時,12小時格式,無前導零。 | `'1'`到`'12'` |
| G | 小時,24小時格式,無前導零。 | `'0'`到`'23'` |
| h | 小時,12小時格式。 | `'01'`到`'12'` |
| H | 小時,24小時格式。 | `'00'`到`'23'` |
| i | 分鍾。 | `'00'`到`'59'` |
| I | 夏令時間,無論是否生效。 | `'1'`或`'0'` |
| j | 沒有前導零的月份的日子。 | `'1'`到`'31'` |
| l | 星期幾,文字長。 | `'星期五'` |
| L | 布爾值是否是一個閏年。 | `True`或`False` |
| m | 月,2位數字帶前導零。 | `'01'`到`'12'` |
| M | 月,文字,3個字母。 | `“揚”` |
| n | 月無前導零。 | `'1'`到`'12'` |
| N | 美聯社風格的月份縮寫。 專有擴展。 | `'Jan.'`,`'Feb.'`,`'March'`,`'May'` |
| o | ISO-8601周編號,對應於使用閏年的ISO-8601周數(W)。 對於更常見的年份格式,請參見Y。 | `'1999年'` |
| O | 與格林威治時間的差異在幾小時內。 | `'+0200'` |
| P | 時間為12小時,分鍾和'a.m。'/'p.m。',如果為零,分鍾停留,特殊情況下的字符串“午夜”和“中午”。 專有擴展。 | `'1 am'`,`'1:30 pm' / t3>,'midnight','noon','12:30 pm' / T10>` |
| r | [**RFC 5322**](https://tools.ietf.org/html/rfc5322.html)格式化日期。 | `'Thu, 21 Dec 2000 16:01:07 +0200'` |
| s | 秒,帶前導零的2位數字。 | `'00'`到`'59'` |
| S | 一個月的英文序數后綴,2個字符。 | `'st'`,`'nd'`,`'rd'`或`'th'` |
| t | 給定月份的天數。 | `28` to `31` |
| T | 本機的時區。 | `'EST'`,`'MDT'` |
| u | 微秒。 | `000000` to `999999` |
| U | 自Unix Epoch以來的二分之一(1970年1月1日00:00:00 UTC)。 | |
| w | 星期幾,數字無前導零。 | `'0'`(星期日)至`'6'`(星期六) |
| W | ISO-8601周數,周數從星期一開始。 | `1`,`53` |
| y | 年份,2位數字。 | `'99'` |
| Y | 年,4位數。 | `'1999年'` |
| z | 一年中的日子 | `0`到`365` |
| Z | 時區偏移量,單位為秒。 UTC以西時區的偏移量總是為負數,對於UTC以東時,它們總是為正。 | `-43200`到`43200` |
> 實例:
>
> now = datetime.datetime.now()
>
> 1){{ now|date:'Y-m-d H:i:s'}}
>
> 輸出類似:2018-10-09 11:15:22
>
> 2){{ now|date }}
>
> 輸出類似:Oct. 9, 2018
>
> 傳遞的格式可以是預定義的格式[`DATE_FORMAT`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/settings.html#std:setting-DATE_FORMAT),[`DATETIME_FORMAT`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/settings.html#std:setting-DATETIME_FORMAT),[`SHORT_DATE_FORMAT`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/settings.html#std:setting-SHORT_DATE_FORMAT)或[`SHORT_DATETIME_FORMAT`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/settings.html#std:setting-SHORT_DATETIME_FORMAT)
>
> 3){{ now|date:"DATETIME_FORMAT" }}
>
> 輸出類似:Oct. 9, 2018, 11:19 a.m.
#### 7. default
如果value的計算結果為`False`,則使用給定的默認值。 否則,使用該value。
{{ value|default:"nothing" }}
#### 8. default_if_none
{{ value|default_if_none:"nothing"}}
當且僅當value為`None`,則使用給定的默認值。 否則,使用該value。
注意,如果給出一個空字符串,默認值將*不*被使用。
#### 9. dictsort
{{ value|dictsort:"name" }}
接受一個字典列表,並返回按參數中給出的鍵排序后的列表。
> 實例:
>
> Value = [
> {'name': 'zed', 'age': 19},
> {'name': 'amy', 'age': 22},
> {'name': 'joe', 'age': 31},
> ]
>
> {{ Value|dictsort:'name' }}
> {{ Value|dictsort:'age' }}
>
> 輸出:
>
> [{'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, {'name': 'zed', 'age': 19}]
>
> [{'name': 'zed', 'age': 19}, {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}]
#### 10. dictsortreversed
獲取字典列表,並返回按照參數中給出的鍵按相反順序排序的列表。 這與上面的過濾器完全相同,但返回的值將是相反的順序。
#### 11. divisibleby
{{ value|divisibleby:“2” }}
如果value可以被給出的參數整除,則返回 `True`
> 實例:
>
> value = 12
>
> {{ value|divisibleby:“2” }}
>
> 輸出:True
#### 12. filesizeformat
格式化為“可讀”文件大小(即`'13 KB'`,`t4> MB'`,`'102 bytes'`等)。
{{ value|filesizeformat }}
> 實例:
>
> value = 1234567890
>
> {{ value|filesizeformat }}
>
> 輸出:1.1 GB
#### 13. first
{{ value|first }}
返回序列中的第一項(字符串、列表、元組等)
如果`value`是列表`['a', 'b', 'c'] `,輸出將為`'a'`。
#### 14. floatformat
當不使用參數時,將浮點數舍入到小數點后一位;使用參數時,保留參數指定的位數
> 實例:
>
> pi = 3.1415926
>
> {{ pi|floatformat }}
>
> {{ pi|floatformat:0 }}
>
> {{ pi|floatformat:2 }}
>
> 輸出:
>
> 3.1
> 3
> 3.14
#### 15. get_digit
給定一個整數,返回所請求的數字,其中1是最右邊的數字,2是第二個最右邊的數字等。 返回無效輸入的原始值(如果輸入或參數不是整數,或參數小於1)。否則,輸出總是一個整數。
> 實例:
>
> {{ value|get_digit:"2" }}
>
> 如果`value`為`123456789`,則輸出將為`8`。
#### 16. join
使用字符串連接列表,例如Python的`str.join(list)`
{{ value|join:" // " }}
如果`value`是列表`['a', 'b', 'c'],輸出將為“a // b // C“。`
#### 17. last
返回列表中的最后一個項目
{{ value|last }}
如果`value`是列表`['a', 'b', 'c'],輸出將為'c'`
#### 18. length
返回值的長度
{{ value|length }}
如果`value`是`['a', 'b', 'c', 'd']`或`"abcd"`,輸出將為`4`。
對於未定義的變量,過濾器返回`0`。
#### 19. length_is
如果值的長度是參數,則返回`True`,否則返回`False`。
{{ value|length_is:"4" }}
如果value是['a', 'b', 'c', 'd']或"abcd",輸出將為True。
#### 20. linebreaks
替換純文本中的換行為正確的HTML標簽;單獨的一個換行變成(`<br/>`) ,原文本用p標簽包裹起來。
如果`value`為`Joel\nis a slug`,輸出將為`<p>Joel<br/>is a slug</p>`。
#### 21. linebreaksbr
與linebreaks類似, 區別是, linebreaksbr只替換換行, 替換完成后沒有p標簽包裹.
如果`value`為`Joel\nis a slug`,輸出將為`Joel<br/>is a slug`。
#### 22. linenumbers
輸出多行文本時, 在行前顯示行號.
{{ value|linenumbers }}
如果`value`為:
> one
> two
> three
輸出將是:
>1. one
>2. two
>3. three
#### 23. ljust
將給定寬度的字段中的值左對齊。
"{{ value|ljust:"10" }}"
如果`value`為`Django`,則輸出將為`“Django ”`。
#### 24. lower
將字符串轉換為全部小寫。
如果`value`是`ABC`, 則輸出將為`abc`
#### 25. make_list
返回轉換為列表的值。
{{ value|make_list }}
如果`value`是字符串`"Joel"`,輸出將是列表`['J', 'o' , 'e', 'l']`。 如果`value`為`123`,輸出將為列表`['1', '2', '3']`。
#### 26. pluralize
如果值不是1則返回一個復數形式 , 通常用 `'s'`表示.
例如:
> You have {{ num_messages }} message{{ num_messages|pluralize }}.
如果`num_messages`是`1`,則輸出將為 `You have 1 message.` 如果`num_messages`是`2`,輸出將為 `You have 2 messages.`
另外如果你需要的不是 `'s'`后綴的話, 你可以提供一個備選的參數給過濾器;
例如:
> You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
對於非一般形式的復數,你可以同時指定 單復數形式,用逗號隔開.
例如:
> You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
#### 27. pprint
用於調試, 方便查看.
#### 28. random
返回給定列表中的隨機項。
{{ value|random }}
如果value是['a', 'b', 'c', 'd'], 輸出可能是'c'.
#### 29. rjust
右對齊給定寬度字段中的值。
#### 30. safe
將字符串標記為在輸出之前不需要進一步的HTML轉義。 當自動轉義關閉時,此過濾器不起作用。
#### 31. safeseq
將[`safe`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/templates/builtins.html#std:templatefilter-safe)過濾器應用於序列的每個元素。 與對序列進行操作的其他過濾器(例如[`join`](https://yiyibooks.cn/__trs__/xx/Django_1.11.6/ref/templates/builtins.html#std:templatefilter-join))一起使用非常有用。
{{ some_list|safeseq|join:", " }}
#### 32. slice
返回列表的一部分。
{{ some_list|slice:":2" }}
如果`some_list`為`['a', 'b', 'c']`,那么輸出將是`['a', 'b']`。
#### 33. striptags
盡一切可能努力剝離所有[X] HTML標簽。
{{ value|striptags }}
如果value為"\<b>cu ti\</b>", 輸出結果為cuti(不帶樣式).
#### 34. time
根據給定的格式格式化時間。
> 實例:
>
> now = datetime.datetime.now()
>
> {{ now|time:'H:i:s' }}
>
> 輸出類似:
>
> 13:25:53
### 35. timesince
將日期格式設為自該日期起的時間(例如,“4天,6小時”)。
> 實例:
>
> now = datetime.datetime.now()
>
> blog_date = now - datetime.timedelta(days=2)
>
> {{ blog_date|timesince:now }}
>
> {{ now|timesince:blog_date }}
>
> 輸出類似:
>
> 2 days
> 0 minutes
#### 36. timeuntil
與timesince類似
> 實例:
>
> now = datetime.datetime.now()
>
> blog_date = now - datetime.timedelta(days=2)
>
> {{ blog_date|timeuntil:now }}
>
> {{ now|timeuntil:blog_date }}
>
> 輸出類似:
>
> 0 minutes
> 2 days
#### 37. title
將字符串中的每個單詞首字母轉為大寫
{{ value|title }}
如果`value`為`“my FIRST post”`,輸出將為`“My First Post”`。
#### 38. truncatechars
如果字符串字符多於指定的字符數量,那么會被截斷。 截斷的字符串將以可翻譯的省略號序列(“...”)結尾。
{{ value|truncatechars:9 }}
如果`value`為`“myFIRSTpost”`,輸出將為`“MyFirst...”`。
#### 39.truncatewords
在一定數量的字后截斷字符串。
{{ value|truncatewords:2 }}
如果`value`為`“my name is post”`,輸出將為`“My name ...”`。
#### 40. upper
將字符串轉換為大寫形式
{{ value|upper }}
如果`value`是`abc`, 則輸出將為`ABC`
#### 41. urlencode
轉義要在URL中使用的值。
{{ value|urlencode }}
如果`value`為`"https://www.example.org/foo?a=b&c=d"`,輸出將為`"https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"`
可以提供包含不應該轉義的字符的可選參數。
如果未提供,則'/'字符被假定為安全的。 當*所有*字符應該轉義時,可以提供空字符串。 像這樣:
{{ value|urlencode:"" }}
如果`value`為`"https://www.example.org/"`,輸出將為`"https%3A%2F%2Fwww.example.org%2F"`
#### 42. wordcount
返回字數(單詞數)
{{ value|wordcount }}
如果`value`是`“Joel is a slug”,輸出將為4`
#### 43. wordwrap
以指定的行長度換行單詞。