1. 程式人生 > >Django內建模版過濾器

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 | floatformat3 }} 34.232 34.00000 {{ value | floatformat3 }} 34.000 34.26000 {{ value | floatformat3 }} 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&amp;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>