Django內建模版過濾器
Django內建過濾器總覽
可以查詢下表來總覽Django的內建過濾器:
過濾器 | 說明 |
---|---|
add | 加法 |
addslashes | 新增斜槓 |
capfirst | 首字母大寫 |
center | 文字居中 |
cut | 切除字元 |
date | 日期格式化 |
default | 設定預設值 |
default_if_none | 為None設定預設值 |
dictsort | 字典排序 |
dictsortreversed | 字典反向排序 |
divisibleby | 整除判斷 |
escape | 轉義 |
escapejs | 轉義js程式碼 |
filesizeformat | 檔案尺寸人性化顯示 |
first | 第一個元素 |
floatformat | 浮點數格式化 |
force_escape | 強制立刻轉義 |
get_digit | 獲取數字 |
iriencode | 轉換IRI |
join | 字元列表連結 |
last | 最後一個 |
length | 長度 |
length_is | 長度等於 |
linebreaks | 行轉換 |
linebreaksbr | 行轉換 |
linenumbers | 行號 |
ljust | 左對齊 |
lower | 小寫 |
make_list | 分割成字元列表 |
phone2numeric | 電話號碼 |
pluralize | 複數形式 |
pprint | 除錯 |
random | 隨機獲取 |
rjust | 右對齊 |
safe | 安全確認 |
safeseq | 列表安全確認 |
slice | 切片 |
slugify | 轉換成ASCII |
stringformat | 字串格式化 |
striptags | 去除HTML中的標籤 |
time | 時間格式化 |
timesince | 從何時開始 |
timeuntil | 到何時多久 |
title | 所有單詞首字母大寫 |
truncatechars | 截斷字元 |
truncatechars_html | 截斷字元 |
truncatewords | 截斷單詞 |
truncatewords_html | 截斷單詞 |
unordered_list | 無序列表 |
upper | 大寫 |
urlencode | 轉義url |
urlize | url轉成可點選的連結 |
urlizetrunc | urlize的截斷方式 |
wordcount | 單詞計數 |
wordwrap | 單詞包裹 |
yesno | 將True,False和None,對映成字串‘yes’,‘no’,‘maybe’ |
為模版過濾器提供引數的方式是:過濾器後加個冒號,再緊跟引數,中間不能有空格!
目前只能為過濾器最多提供一個引數!
1. add
把add後的引數加給value。像這樣:
{{ value|add:"2" }}
如果value為 4,則會輸出6.
過濾器首先會強制把兩個值轉換成Int型別。 如果強制轉換失敗, 它會試圖使用各種方式把兩個值相加。
對於下面的例子:
{{ first|add:second }}
如果first是[1, 2, 3],second是[4, 5, 6], 將會輸出[1, 2, 3, 4, 5, 6].
2. addslashes
在引號前面加上斜杆。常用於在CSV中轉義字串。像這樣:
{{ value|addslashes }}
如果value是"I'm using Django", 輸出將變成 "I\'m using Django".
3. capfirst
大寫變數的第一個字母。 如果第一個字元不是字母,該過濾器將不會生效。
{{ value|capfirst }}
如果value是"django", 輸出將變成"Django"。
4. center
在給定的寬度範圍內居中.
"{{ value|center:"15" }}"
如果value是"Django",輸出將是Django
。
5. cut
移除value中所有的與給定引數相同的字串。
{{ value|cut:" " }}
如果value為“String with spaces”,輸出將為"Stringwithspaces"。
6. date
根據給定格式對一個日期變數進行格式化。
可用的格式字串:
格式化字元 | 描述 | 示例輸出 |
---|---|---|
a | 'a.m.'或'p.m.' | 'a.m.' |
A | 'AM'或'PM' | 'AM' |
b | 月份,文字形式,3個字母,小寫。 | “jan” |
B | 未實現。 | |
c | ISO 8601格式 | 2008-01-02T10:30:00.000123+02:00 |
d | 月的日子,帶前導零的2位數字。 | '01'到'31' |
D | 周幾的文字表述形式,3個字母。 | 'Fri' |
e | 時區名稱 | '','GMT','-500','US/Eastern'等 |
E | 月份,分地區。 | |
f | 時間 | '1','1:30' |
F | 月,文字形式。 | 'January' |
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 | 星期幾,完整英文名 | 'Friday' |
L | 布林值是否是一個閏年。 | True或False |
m | 月,2位數字帶前導零。 | '01'到'12' |
M | 月,文字,3個字母。 | “Jan” |
n | 月無前導零。 | '1'到'12' |
N | 美聯社風格的月份縮寫。 | 'Jan.','Feb.','March','May' |
o | ISO-8601周編號 | '1999' |
O | 與格林威治時間的差,單位小時。 | '+0200' |
P | 時間為12小時 | '1 am','1:30 pm','midnight','noon','12:30 pm'> |
r | RFC 5322格式化日期。 | '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 | 時區偏移量,單位為秒。 | -43200到43200 |
範例:
{{ value|date:"D d M Y" }}
如果value是一個datetime物件,比如datetime.datetime.now(),輸出將是字串'Wed 09 Jan 2008'。
可以將date與time過濾器結合使用,以呈現datetime值的完整表示形式。 例如。:
{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
7. default
為變數提供一個預設值。
{{ value|default:"nothing" }}
8. default_if_none
如果(且僅當)value為None,則使用給定的預設值。
{{ value|default_if_none:"nothing" }}
9. dictsort
接受一個包含字典元素的列表,並返回按引數中給出的鍵排序後的列表。
{{ value|dictsort:"name" }}
如果value為:
[ {'name': 'zed', 'age': 19}, {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, ]
那麼輸出將是:
[ {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, {'name': 'zed', 'age': 19}, ]
還也可以做更復雜的事情,如:
{% for book in books|dictsort:"author.age" %} * {{ book.title }} ({{ book.author.name }}) {% endfor %}
如果books是:
[ {'title': '1984', 'author': {'name': 'George', 'age': 45}}, {'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}}, {'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}}, ]
那麼輸出將是:
* Alice (Lewis) * 1984 (George) * Timequake (Kurt)
dictsort也可以按指定索引對多維列表進行排序,像這樣:
{{ value|dictsort:0 }}
如果value為:
[ ('a', '42'), ('c', 'string'), ('b', 'foo'), ]
那麼輸出將是:
[ ('a', '42'), ('b', 'foo'), ('c', 'string'), ]
必須提供整數索引,不能是字串。 以下產生空輸出:
{{ values|dictsort:"0" }}
10. dictsortreversed
前面過濾器的反序功能。
11. divisibleby
如果value可以被引數整除,則返回True。
{{ value|divisibleby:"3" }}
如果value是21,則輸出True。
12. escape
轉義字串的HTML。
轉義僅在字串輸出時應用,因此在連結的過濾器序列中escape的位置無關緊要,就像它是最後一個過濾器。 如果要立即應用轉義,請使用force_escape
過濾器。
13. escapejs
轉義用於JavaScript字串的字元。 確保在使用模板生成JavaScript / JSON時避免語法錯誤。
{{ value|escapejs }}
如果value為testing\r\njavascript \'string" <b>escaping</b>
,輸出將為testing\\u000D\\u000Ajavascript \\u0027string\\u0022 \\u003Cb\\u003Eescaping\\u003C/b\\u003E
。
14. filesizeformat
格式化為直觀的檔案大小形式(即'13 KB', '4.1 MB', '102 bytes'等)。
{{ value|filesizeformat }}
如果value為123456789,輸出將是117.7 MB。
15. first
返回列表中的第一項。
{{ value|first }}
如果value是列表['a', 'b', 'c'] ,輸出將為'a'。
16. floatformat
當不使用引數時,將浮點數舍入到小數點後一位,但前提是要顯示小數部分。 像這樣:
value 模板語法 輸出
34.23234 {{ value | floatformat }} 34.2 34.00000 {{ value | floatformat }} 34 34.26000 {{ value | floatformat }} 34.3
如果與數字整數引數一起使用,將數字四捨五入為小數位數。 像這樣:
value 模板語法 輸出
34.23234 {{ value | floatformat:3 }} 34.232 34.00000 {{ value | floatformat:3 }} 34.000 34.26000 {{ value | floatformat:3 }} 34.260
特別有用的是傳遞0(零)作為引數,它將使float浮動到最接近的整數。
value 模板語法 輸出
34.23234 {{ value | floatformat:“0” }} 34 34.00000 {{ value | floatformat:“0” }} 34 39.56000 {{ value | floatformat:“0” }} 40
如果傳遞給floatformat的引數為負,則會將一個數字四捨五入到小數點後的位置,但前提是要顯示一個小數部分。 像這樣:
value 模板語法 輸出
34.23234 {{ value | floatformat:“ - 3” }} 34.232 34.00000 {{ value | floatformat:“ - 3” }} 34 34.26000 {{ value | floatformat:“ - 3” }} 34.260
17. force_escape
立即轉義HTML字串。
18. get_digit
給定一個整數,返回所請求的數字,1表示最右邊的數字,2表示第二個最右邊的數字,以此類推。
{{ value|get_digit:"2" }}
如果value為123456789,則輸出8。
19. iriencode
將IRI(國際化資源識別符號)轉換為適合包含在URL中的字串。
{{ value|iriencode }}
如果value是?test=1&me=2
,輸出則是?test=1&me=2
。
20. join
使用字串連線列表,類似Python的str.join(list)
{{ value|join:" // " }}
如果value是列表['a', 'b', 'c'] ,輸出為a // b // c
。
21. last
返回列表中的最後一個專案。類似first過濾器。
{{ value|last }}
22. length
返回物件的長度。 這適用於字串和列表。
{{ value|length }}
如果value是['a', 'b', 'c', 'd']或"abcd",輸出將為4。
對於未定義的變數,過濾器返回0。
23. length_is
如果物件的長度等於引數值,則返回True,否則返回False。
{{ value|length_is:"4" }}
如果value是['a', 'b', 'c', 'd']或"abcd",輸出將為True。
24. linebreaks
替換純文字中的換行符為<p>
標籤。
{{ value|linebreaks }}
如果value是Joel\nis a slug
,輸出將為<p>Joel<br />is a slug</p>
。
25. linebreaksbr
替換純文字中的換行符為<br />
標籤。
{{ value|linebreaksbr }}
如果value是Joel\nis a slug
,輸出將為Joel<br />is a slug
。
26. linenumbers
顯示帶行號的文字。
{{ value|linenumbers }}
如果value為:
one two three
輸出將是:
1. one 2. two 3. three
27. ljust
給定寬度下左對齊。
"{{ value|ljust:"10" }}"
如果value為Django,則輸出為Django
。
28. lower
將字串轉換為全部小寫。
{{ value|lower }}
29. make_list
將物件轉換為字元的列表。對於字串,直接拆分為單個字元的列表。對於整數,在建立列表之前將引數強制轉換為unicode字串。
{{ value|make_list }}
如果value是字串"Joel",輸出將是列表['J', 'o' , 'e', 'l']。
如果value為123,輸出為列表['1', '2', '3']。
30. phone2numeric
將電話號碼(可能包含字母)轉換為其等效數字。
{{ value|phone2numeric }}
如果value為800-COLLECT
,輸出將為800-2655328。
31. 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" }}.
32. pprint
用於除錯的過濾器。
33. random
返回給定列表中的隨機項。
{{ value|random }}
34. rjust
右對齊給定寬度欄位中的值。
"{{ value|rjust:"10" }}"
35. safe
將字串標記為安全,不需要轉義。不再贅述。
36. safeseq
將safe過濾器應用於序列的每個元素。 與對序列進行其他過濾操作(例如join)一起使用時非常有用。
{{ some_list|safeseq|join:", " }}
在這種情況下,不能直接使用safe過濾器,因為它首先將變數轉換為字串,而不是使用序列的各個元素。
37. slice
返回列表的一部分。也就是切片,與Python的列表切片相同的語法。
{{ some_list|slice:":2" }}
如果some_list是['a', 'b', 'c'] ,輸出將為['a', 'b']。
38. slugify
轉換為ASCII。空格轉換為連字元。刪除不是字母數字,下劃線或連字元的字元。轉換為小寫。還會去除前導和尾隨空格。
{{ value|slugify }}
如果value是Joel is a slug
,輸出為joel-is-a-slug
。
39. stringformat
根據引數,格式化變數。
{{ value|stringformat:"E" }}
如果value為10,輸出將為1.000000E+01。
40. striptags
儘可能的去除HTML中的標籤。
{{ value|striptags }}
如果value是<b>Joel</b> <button>is</button> a <span>slug</span>
,輸出Joel is a slug
。
41. time
根據給定的格式,格式化時間。給定格式可以是預定義的TIME_FORMAT
,也可以是與date過濾器相同的自定義格式。
{{ value|time:"H:i" }}
如果value等於datetime.datetime.now(),則輸出字串01:23
。
time過濾器只接受格式字串中與時間相關的引數,而不是日期。如果需要格式化date值,請改用date過濾器。
42. timesince
將日期格式設為自該日期起的時間(例如,“4天,6小時”)。
採用一個可選引數,它是一個包含用作比較點的日期的變數。例如,如果blog_date
是表示2006年6月1日午夜的日期例項,並且comment_date
是2006年6月1日08:00,則以下將返回“8 hours”:
{{ blog_date|timesince:comment_date }}
43. timeuntil
類似於timesince,它測量從現在開始直到給定日期或日期時間的時間。例如,如果今天是2006年6月1日,而conference_date
是2006年6月29日,則{{ conference_date | timeuntil }}
將返回“4 weeks”。
可選引數是一個包含用作比較點的日期變數。如果from_date
為2006年6月22日,則以下內容將返回“1 weeks”:
{{ conference_date|timeuntil:from_date }}
44. title
將所有單詞的首字母大寫,其它字母小寫。
{{ value|title }}
如果value為“my FIRST post”,輸出將為“My First Post”。
45. truncatechars
如果字串包含的字元總個數多於指定的字元數量,那麼會被截斷掉後面的部分。截斷的字串將以“...”結尾。
{{ value|truncatechars:9 }}
如果value是Joel is a slug
,輸出為Joel i...
。
46. truncatechars_html
類似於truncatechars,但是會保留HTML標記。
{{ value|truncatechars_html:9 }}
如果value是<p>Joel is a slug</p>
,輸出<p>Joel i...</p>
。
47. truncatewords
在一定數量的字數後截斷字串。與truncatechars不同的是,這個以字的個數計數,而不是字元計數。
{{ value|truncatewords:2 }}
如果value 是Joel is a slug
, 輸出為Joel is ...
。
字串中的換行符將被刪除。
48. truncatewords_html
類似於truncatewords,但是保留HTML標記。
{{ value|truncatewords_html:2 }}
HTML內容中的換行符將保留。
49. unordered_list
接收一個巢狀的列表,返回一個HTML的無序列表,但不包含開始和結束的<ul>
標籤。
例如,如果var 包含['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], 那麼{{ var|unordered_list }}
將返回:
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li> <li>Topeka</li> </ul> </li> <li>Illinois</li> </ul> </li>
50. upper
將字串轉換為全部大寫的形式:
{{ value|upper }}
51. urlencode
轉義要在URL中使用的值。
{{ value|urlencode }}
如果value為https://www.example.org/foo?a=b&c=d
,輸出https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd
。
52. urlize
將文字中的網址和電子郵件地址轉換為可點選的連結。
該模板標籤適用於字首為http://
,https://
的連結,或者www
。
由urlize生成的連結會向其中新增rel="nofollow"屬性。
{{ value|urlize }}
如果value是Check out www.djangoproject.com
,輸出Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>
。
除了超級連結之外,urlize也會將電子郵件地址轉換為郵件地址連結。 如果value是Send questions to [email protected]
,輸出將是Send questions to <a href="mailto:[email protected]">[email protected]</a>
。
53. urlizetrunc
將網址和電子郵件地址轉換為可點選的連結,就像urlize,但截斷長度超過給定字元數限制的網址。
{{ value|urlizetrunc:15 }}
如果value是Check out www.djangoproject.com
,將輸出Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangopr...</a>'
.
與urlize一樣,此過濾器應僅應用於純文字。
54. wordcount
返回單詞的個數。
{{ value|wordcount }}
如果value是Joel is a slug
,輸出4。
55. wordwrap
以指定的行長度,換行單詞。
{{ value|wordwrap:5 }}
如果value是Joel is a slug
,輸出為:
Joel is a slug
56. yesno
將True,False和None,對映成字串‘yes’,‘no’,‘maybe’。
{{ value|yesno:"yeah,no,maybe" }}
國際化標籤和過濾器
Django還提供了一些模板標籤和過濾器,用以控制模板中國際化的每個方面。它們允許對翻譯,格式化和時區轉換進行粒度控制。
1. i18n
此標籤允許在模板中指定可翻譯文字。要啟用它,請將USE_I18N
設定為True,然後載入{% load i18n %}
。
2. l10n
此標籤提供對模板的本地化控制,只需要使用{% load l10n %}
。通常將USE_L10N
設定為True,以便本地化預設處於活動狀態。
3. tz
此標籤對模板中的時區進行控制。 像l10n,只需要使用{% load tz }
,但通常還會將USE_TZ
設定為True,以便預設情況下轉換為本地時間。
其他標籤和過濾器庫
Django附帶了一些其他模板標籤,必須在INSTALLED_APPS
設定中顯式啟用,並在模板中啟用{% load %}
標記。
1. django.contrib.humanize
一組Django模板過濾器,用於向資料新增“人性化”,更加可讀。
2. static
static標籤用於連結儲存在STATIC_ROOT
中的靜態檔案。例如:
{% load static %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
還可以使用變數:
{% load static %} <link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen" />
還可以像下面這麼使用:
{% load static %}
{% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}"></img>