Django内建模版标签和过滤器
第四章列出了許多的常用內(nèi)建模板標(biāo)簽和過(guò)濾器。然而,Django自帶了更多的內(nèi)建模板標(biāo)簽及過(guò)濾器。這章附錄列出了截止到編寫(xiě)本書(shū)時(shí),Django所包含的各個(gè)內(nèi)建模板標(biāo)簽和過(guò)濾器,但是,新的標(biāo)簽是會(huì)被定期地加入的。
對(duì)于提供的標(biāo)簽和過(guò)濾器,最好的參考就是直接進(jìn)入你的管理界面。Django的管理界面包含了一份針對(duì)當(dāng)前站點(diǎn)的所有標(biāo)簽和過(guò)濾器的完整參考。想看到它的話,進(jìn)入你的管理界面,單擊右上角的Documentation(文檔)鏈接。
內(nèi)建文檔中的“標(biāo)簽和過(guò)濾器”小節(jié)闡述了所有內(nèi)建標(biāo)簽(事實(shí)上,本附錄中的標(biāo)簽和過(guò)濾器參考都直接來(lái)自那里)和所有可用的定制標(biāo)簽庫(kù)。
考慮到那些沒(méi)有管理站點(diǎn)可用的人們,這里提供了常用的標(biāo)簽和過(guò)濾器的參考。由于Django是可高度定制的,管理界面中的那些可用的標(biāo)簽和過(guò)濾器的參考可認(rèn)為是最可信的。
內(nèi)建標(biāo)簽參考
block
定義一個(gè)能被子模板覆蓋的區(qū)塊。參見(jiàn)第四章“模板繼承”一節(jié)查看更多信息。
comment
模板引擎會(huì)忽略掉?{% comment %}?和?{% endcomment %}?之間的所有內(nèi)容。
cycle
輪流使用標(biāo)簽給出的字符串列表中的值。
在一個(gè)循環(huán)內(nèi),輪流使用給定的字符串列表元素:
{% for o in some_list %} <tr class="{% cycle row1,row2 %}"> ... </tr> {% endfor %}在循環(huán)外,在你第一次調(diào)用時(shí),給這些字符串值定義一個(gè)不重復(fù)的名字,以后每次只需使用這個(gè)名字就行了:
<tr class="{% cycle row1,row2,row3 as rowcolors %}">...</tr> <tr class="{% cycle rowcolors %}">...</tr> <tr class="{% cycle rowcolors %}">...</tr>你可以使用任意數(shù)量的用逗號(hào)分隔的值。注意不要在值與值之間有空格,只是一個(gè)逗號(hào)。
debug
輸出完整的調(diào)試信息,包括當(dāng)前的上下文及導(dǎo)入的模塊信息。
extends
標(biāo)記當(dāng)前模板擴(kuò)展一個(gè)父模板。
這個(gè)標(biāo)簽有兩種用法:
?
{% extends "base.html" %}?(帶引號(hào)) 直接使用要擴(kuò)展的父模板的名字?"base.html"?。
?
{% extends variable %}?用變量?variable?的值來(lái)指定父模板。如果變量是一個(gè)字符串,Django會(huì)把字符串的值當(dāng)作父模板的文件名。如果變量是一個(gè)?Template?對(duì)象,Django會(huì)把這個(gè)對(duì)象當(dāng)作父模板。
?
參看第四章更多應(yīng)用實(shí)例。
filter
通過(guò)可變過(guò)濾器過(guò)濾變量的內(nèi)容。
過(guò)濾器也可以相互傳輸,它們也可以有參數(shù),就像變量的語(yǔ)法一樣。
看這個(gè)用法實(shí)例:
{% filter escape|lower %} This text will be HTML-escaped, and will appear in all lowercase. {% endfilter %}
firstof
輸出傳入的第一個(gè)不是?False?的變量,如果被傳遞變量都為?False?,則什么也不輸出。
看這個(gè)用法實(shí)例:
{% firstof var1 var2 var3 %}這等同于如下內(nèi)容:
{% if var1 %} {{ var1 }} {% else %}{% if var2 %} {{ var2 }} {% else %}{% if var3 %} {{ var3 }} {% endif %}{% endif %}{% endif %}
for
輪詢數(shù)組中的每一元素。例如顯示一個(gè)指定的運(yùn)動(dòng)員的序列?athlete_list?:
<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>你也可以逆向遍歷一個(gè)列表?{% for obj in list reversed %}?。
for?循環(huán)設(shè)置了許多循環(huán)中可用的變量(見(jiàn)表F-1)。
| forloop.counter | 當(dāng)前循環(huán)次數(shù)(索引最小為1)。 |
| forloop.counter0 | 當(dāng)前循環(huán)次數(shù) (索引最小為0)。 |
| forloop.revcounter | 剩余循環(huán)次數(shù) (索引最小為1)。 |
| forloop.revcounter0 | 剩余循環(huán)次數(shù) (索引最小為0)。 |
| forloop.first | 第一次循環(huán)時(shí)為?True?。 |
| forloop.last | 最后一次循環(huán)時(shí)為?True?。 |
| forloop.parentloop | 用于嵌套循環(huán),表示當(dāng)前循環(huán)外層的循環(huán)。 |
if
{% if %}?標(biāo)簽測(cè)試一個(gè)變量,若變量為真(即其存在、非空,且不是一個(gè)為假的布爾值),區(qū)塊中的內(nèi)容就會(huì)被輸出:
{% if athlete_list %} Number of athletes: {{ athlete_list|length }} {% else %} No athletes. {% endif %}若?athlete_list?非空,變量?{{ athlete_list|length }}?就會(huì)顯示運(yùn)動(dòng)員的數(shù)量。
正如你所見(jiàn),?if?標(biāo)簽有可選的?{% else %}?從句,若條件不成立則顯示該從句。
if?語(yǔ)句可使用?and?、?or?和?not?來(lái)測(cè)試變量或者對(duì)給定的變量取反:
{% if athlete_list and coach_list %} Both athletes and coaches are available. {% endif %} {% if not athlete_list %} There are no athletes. {% endif %} {% if athlete_list or coach_list %} There are some athletes or some coaches. {% endif %} {% if not athlete_list or coach_list %} There are no athletes or there are some coaches (OK, so writing English translations of Boolean logic sounds stupid; it's not our fault). {% endif %} {% if athlete_list and not coach_list %} There are some athletes and absolutely no coaches. {% endif %}不允許?and?和?or?同時(shí)出現(xiàn)在一個(gè)?if?語(yǔ)句中,因?yàn)檫@樣會(huì)有邏輯上的問(wèn)題。例如這樣是有語(yǔ)病的:
{% if athlete_list and coach_list or cheerleader_list %}如果你需要同時(shí)使用?and?和?or?來(lái)實(shí)現(xiàn)較高級(jí)的邏輯,可以用嵌套的?if?標(biāo)簽來(lái)實(shí)現(xiàn)。例如:
{% if athlete_list %} {% if coach_list or cheerleader_list %} We have athletes, and either coaches or cheerleaders! {% endif %} {% endif %}重復(fù)使用同一邏輯符是可以的。例如這樣是正確的:
{% if athlete_list or coach_list or parent_list or teacher_list %}
ifchanged
檢查循環(huán)中一個(gè)值從最近一次重復(fù)其是否改變。
ifchanged?語(yǔ)句塊用于循環(huán)中,其作用有兩個(gè):
?
它會(huì)把要渲染的內(nèi)容與前一次作比較,發(fā)生變化時(shí)才顯示它。例如,下面要顯示一個(gè)日期列表,只有月份改變時(shí)才會(huì)顯示它:
?
<h1>Archive for {{ year }}</h1> {% for date in days %} {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %} <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a> {% endfor %}?
如果給的是一個(gè)變量,就會(huì)檢查它是否發(fā)生改變。
?
{% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} {% ifchanged date.hour date.date %} {{ date.hour }} {% endifchanged %} {% endfor %}?
前面那個(gè)例子中日期每次發(fā)生變化時(shí)就會(huì)顯示出來(lái),但只有小時(shí)和日期都發(fā)生變化時(shí)才會(huì)顯示小時(shí)。
ifequal
如果兩個(gè)參數(shù)相等,就輸出該區(qū)塊的內(nèi)容。
舉個(gè)例子:
{% ifequal user.id comment.user_id %} ... {% endifequal %}正如?{% if %}?標(biāo)簽一樣,?{% else %}?語(yǔ)句是可選的。
參數(shù)也可以是硬編碼的字符串,所以下面這種寫(xiě)法是正確的:
{% ifequal user.username "adrian" %} ... {% endifequal %}可以用來(lái)比較的參數(shù)只限于模板變量或者字符串(實(shí)際上整數(shù)和小數(shù)也是可以的——譯注),你不能檢查諸如?True?or?False?等Python對(duì)象是否相等。如果你需要測(cè)試某值的真假,可以用?if?標(biāo)簽。
ifnotequal
和?ifequal?類似,不過(guò)它是用來(lái)測(cè)試兩個(gè)參數(shù)是 不 相等的。
include
加載一個(gè)模板,并用當(dāng)前上下文對(duì)它進(jìn)行渲染,這是在一個(gè)模板中包含其他模板的一種方法。
模板名可以是一個(gè)變量或者是一個(gè)硬編碼(引號(hào)引起來(lái)的)的字符串,引號(hào)可以是單引號(hào)或者雙引號(hào)。
這個(gè)例子包含了?"foo/bar.html"?模板的內(nèi)容:
{% include "foo/bar.html" %}這個(gè)例子包含了名字由變量?template_name?指定的模板的內(nèi)容:
{% include template_name %}
load
讀入一個(gè)自定義的模板庫(kù)。第十章里有關(guān)于自定義模板的相關(guān)信息資料
now
根據(jù)給定的格式字符串顯示當(dāng)前日期。
這個(gè)標(biāo)簽來(lái)源于PHP中的?date()?函數(shù)(?http://php.net/date?),并使用與其相同的格式語(yǔ)法,但是Django對(duì)其做了擴(kuò)展。
表F-2顯示了可用的格式字符串。
| a | 'a.m.'?或者?'p.m.'?。(這與PHP中的輸出略有不同,因?yàn)闉榱似ヅ涿缆?lián)社風(fēng)格,它包含了句點(diǎn)。 | 'a.m.' |
| A | 'AM'?或者?'PM'?。 | 'AM' |
| b | 月份,文字式的,三個(gè)字母,小寫(xiě)。 | 'jan' |
| d | 一月的第幾天,兩位數(shù)字,帶前導(dǎo)零。 | '01'?到?'31' |
| D | 一周的第幾天,文字式的,三個(gè)字母。 | 'Fri' |
| f | 時(shí)間,12小時(shí)制的小時(shí)和分鐘數(shù),如果分鐘數(shù)為零則不顯示。 | '1'?,?'1:30' |
| F | 月份,文字式的,全名。 | 'January' |
| g | 小時(shí),12小時(shí)制,沒(méi)有前導(dǎo)零。 | '1'?到?'12' |
| G | 小時(shí),24小時(shí)制,沒(méi)有前導(dǎo)零。 | '0'?到?'23' |
| h | 小時(shí),12小時(shí)制。 | '01'?到?'12' |
| H | 小時(shí),24小時(shí)制。 | '00'?到?'23' |
| i | 分鐘。 | '00'?到?'59' |
| j | 一月的第幾天,不帶前導(dǎo)零。 | '1'?到?'31' |
| l | 一周的第幾天,文字式的,全名。 | 'Friday' |
| L | 是否為閏年的布爾值。 | True?到?False |
| m | 月份,兩位數(shù)字,帶前導(dǎo)零。 | '01'?到?'12' |
| M | 月份,文字式的,三個(gè)字母。 | 'Jan' |
| n | 月份,沒(méi)有前導(dǎo)零。 | '1'?到?'12' |
| N | 美聯(lián)社風(fēng)格的月份縮寫(xiě)。 | 'Jan.'?,?'Feb.'?,'March'?,?'May' |
| O | 與格林威治標(biāo)準(zhǔn)時(shí)間的時(shí)間差(以小時(shí)計(jì))。 | '+0200' |
| P | 時(shí)間,12小時(shí)制的小時(shí)分鐘數(shù)以及a.m./p.m.,分鐘數(shù)如果為零則不顯示,用字符串表示特殊時(shí)間點(diǎn),如?'midnight'?和?'noon'?。 | '1 a.m.'?,?'1:30 p.m.'?,'midnight'?,'noon'?,?'12:30 p.m.' |
| r | RFC 822 格式的日期。 | 'Thu, 21 Dec 2000 16:01:07 +0200' |
| s | 秒數(shù),兩位數(shù)字,帶前導(dǎo)零。 | '00'?到?'59' |
| S | 英語(yǔ)序數(shù)后綴,用于表示一個(gè)月的第幾天,兩個(gè)字母。 | 'st'?,?'nd'?,?'rd'到?'th' |
| t | 指定月份的天數(shù)。 | 28?到?31 |
| T | 本機(jī)的時(shí)區(qū)。 | 'EST'?,?'MDT' |
| w | 一周的第幾天,數(shù)字,帶前導(dǎo)零。 | '0'?(Sunday) 到'6'?(Saturday) |
| W | ISO-8601 一年中的第幾周,一周從星期一開(kāi)始。 | 1?,?23 |
| y | 年份,兩位數(shù)字。 | '99' |
| Y | 年份,四位數(shù)字。 | '1999' |
| z | 一年的第幾天。 | 0?到?365 |
| Z | 以秒計(jì)的時(shí)區(qū)偏移量,這個(gè)偏移量對(duì)于UTC西部時(shí)區(qū)總是負(fù)數(shù),對(duì)于UTC東部時(shí)區(qū)總是正數(shù)。 | -43200?到?43200 |
看這個(gè)例子:
It is {% now "jS F Y H:i" %}記住,如果你想用一個(gè)字符串的原始值的話,你可以用反斜線進(jìn)行轉(zhuǎn)義。在這個(gè)例子中,f被用反斜線轉(zhuǎn)義了,如果不轉(zhuǎn)義的話f就是顯示時(shí)間的格式字符串。o不用轉(zhuǎn)義,因?yàn)樗緛?lái)就不是一個(gè)格式字母。
It is the {% now "jS o\f F" %}這樣就會(huì)顯示成“It is the 4th of September”。
regroup
把一列相似的對(duì)象根據(jù)某一個(gè)共有的屬性重新分組。
要解釋清這個(gè)復(fù)雜的標(biāo)簽,最好來(lái)舉個(gè)例子。比如,?people?是包含?Person?對(duì)象的一個(gè)列表, 這個(gè)對(duì)象擁有?first_name?、?last_name?和?gender?屬性,你想這樣顯示這個(gè)列表:
* Male: * George Bush * Bill Clinton * Female: * Margaret Thatcher * Condoleezza Rice * Unknown: * Pat Smith下面這段模板代碼就可以完成這個(gè)看起來(lái)很復(fù)雜的任務(wù):
{% regroup people by gender as grouped %} <ul> {% for group in grouped %} <li>{{ group.grouper }} <ul> {% for item in group.list %} <li>{{ item }}</li> {% endfor %} </ul> </li> {% endfor %} </ul>如你所見(jiàn),?{% regroup %}?構(gòu)造了一個(gè)列表變量,列表中的每個(gè)對(duì)象都有?grouper?和?list?屬性。grouper?包含分組所依據(jù)的屬性,?list?包含一系列擁有共同的?grouper?屬性的對(duì)象。這樣?grouper?就會(huì)是?Male?、?Female?和?Unknown?,?list?就是屬于這幾種性別的人們。
記住,如果被分組的列表不是按照某一列排好序的話,你就不能用?{% regroup %}?在這一列上進(jìn)行重新分組!就是說(shuō)如果人的列表不是按照性別排好序的話,在用它之前就要先對(duì)它排序,即:
{% regroup people|dictsort:"gender" by gender as grouped %}
spaceless
去除HTML標(biāo)簽之間的空白符號(hào),包括制表符和換行符。
例如:
{% spaceless %} <p> <a href="foo/">Foo</a> </p> {% endspaceless %}返回結(jié)果如下:
<p><a href="foo/">Foo</a></p>僅僅 標(biāo)簽 之間的空白符被刪掉,標(biāo)簽和文本之間的空白符是不會(huì)被處理的。在下面這個(gè)例子中,Hello?兩邊的空白符是不會(huì)被截掉的:
{% spaceless %} <strong> Hello </strong> {% endspaceless %}
ssi
把一個(gè)指定的文件的內(nèi)容輸出到頁(yè)面上。
像include標(biāo)簽一樣,?{% ssi %}?會(huì)包含另外一個(gè)文件的內(nèi)容,這個(gè)文件必須以絕對(duì)路徑指明:
{% ssi /home/html/ljworld.com/includes/right_generic.html %}如果指定了可選的parsed參數(shù)的話,包含進(jìn)來(lái)的文件的內(nèi)容會(huì)被當(dāng)作模板代碼,并用當(dāng)前的上下文來(lái)渲染:
{% ssi /home/html/ljworld.com/includes/right_generic.html parsed %}注意,如果你要使用?{% ssi %}?的話,為了安全起見(jiàn),你必須在Django配置文件中定義ALLOWED_INCLUDE_ROOTS。
大多數(shù)情況下?{% include %}?比?{% ssi %}?更好用,?{% ssi %}?的存在通常是為了向后兼容。
templatetag
輸出組成模板標(biāo)簽的語(yǔ)法字符。
模板系統(tǒng)沒(méi)有轉(zhuǎn)義的概念,所以要顯示一個(gè)組成模板標(biāo)簽的字符的話,你必須使用?{% templatetag %}?標(biāo)簽。
參數(shù)用來(lái)標(biāo)明要顯示的字符(參見(jiàn)表F-3)。
| openblock | {% |
| closeblock | %} |
| openvariable | {{ |
| closevariable | }} |
| openbrace | { |
| closebrace | } |
| opencomment | {# |
| closecomment | #} |
url
根據(jù)所給視圖函數(shù)和可選參數(shù),返回一個(gè)絕對(duì)的URL(就是不帶域名的URL)。由于沒(méi)有在模板中對(duì)URL進(jìn)行硬編碼,所以這種輸出鏈接的方法沒(méi)有違反DRY原則。
{% url path.to.some_view arg1,arg2,name1=value1 %}第一個(gè)變量是按package.package.module.function形式給出的指向一個(gè)view函數(shù)的路徑。那些可選的、用逗號(hào)分隔的附加參數(shù)被用做URL中的位置和關(guān)鍵詞變量。所有URLconf需要的參數(shù)都應(yīng)該是存在的。
例如,假設(shè)你有一個(gè)view,app_name.client,它的URLconf包含一個(gè)client ID參數(shù)。URLconf對(duì)應(yīng)行可能看起來(lái)像這樣:
('^client/(\d+)/$', 'app_name.client')如果這個(gè)應(yīng)用的URLconf像下面一樣被包含在項(xiàng)目的URLconf里:
('^clients/', include('project_name.app_name.urls'))那么,在模板中,你可以像這樣創(chuàng)建一個(gè)指向那個(gè)view的link連接:
{% url app_name.client client.id %}模板標(biāo)簽將輸出字符串/clients/client/123/
widthratio,寬度的比率
為了畫(huà)出長(zhǎng)條圖,這個(gè)標(biāo)籤計(jì)算一個(gè)給定值相對(duì)於最大值的比率,然後將這個(gè)比率給定一個(gè)常數(shù)
一些實(shí)例:
<img src="bar.gif" height="10" width="{% widthratio this_value max_value 100 %}" />If?this_value?is 175 and?max_value?is 200, the image in the preceding example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5, which is rounded up to 88).
Built-in Filter Reference
add
例如:
{{ value|add:"5" }}參數(shù)與被處理數(shù)據(jù)相加的結(jié)果.
addslashes
例如:
{{ string|addslashes }}給敏感字符添加斜線(轉(zhuǎn)義). 舉例,要將一個(gè)字符串傳遞給 JavaScript 時(shí).
capfirst
例如:
{{ string|capfirst }}將字符串的首字母大寫(xiě)
center
例如:
{{ string|center:"50" }}在一個(gè)給定的長(zhǎng)度讓字符串居中
cut
例如:
{{ string|cut:"spam" }}把給定字符串中包含的所有參數(shù)值刪除掉。
date
Example:
{{ value|date:"F j, Y" }}把一個(gè)date類型按照給定的格式輸出(與”now”標(biāo)簽用法一樣)。
default
例如:
{{ value|default:"(N/A)" }}如果變量不存在,使用默認(rèn)值
default_if_none
例如:
{{ value|default_if_none:"(N/A)" }}如果變量值為None,使用默認(rèn)值
dictsort
例如:
{{ list|dictsort:"foo" }}接受一個(gè)字典列表,返回按給定參數(shù)的屬性排序后的列表.
dictsortreversed
例子:
{{ list|dictsortreversed:"foo" }}接受一個(gè)字典列表,返回按給定參數(shù)的屬性逆序排序后的列表
divisibleby
Example:
{% if value|divisibleby:"2" %} Even! {% else %} Odd! {% else %}如果值能夠被給定的參數(shù)整除的話,返回“True”。
escape
例如:
{{ string|escape }}按照以下的規(guī)則,轉(zhuǎn)義一個(gè)HTML字符串:
?
"&"?to?"&"
?
<?to?"<"
?
>?to?">"
?
'"'?(double quote) to?'"'
?
"'"?(single quote) to?'''
filesizeformat
Example:
{{ value|filesizeformat }}將值格式化為 ‘可讀性好的’ 文件大小(比如 ‘13 KB’, ‘4.1 MB’, ‘102bytes’ 等等).
first
Example:
{{ list|first }}返回列表中的第一個(gè)元素.
fix_ampersands
Example:
{{ string|fix_ampersands }}將 & 符號(hào)替換為 & 實(shí)體
floatformat
Examples:
{{ value|floatformat }} {{ value|floatformat:"2" }}將一個(gè)浮點(diǎn)數(shù)四舍五入到小數(shù)點(diǎn)后1位 — 如果根本沒(méi)有小數(shù),小數(shù)部分不會(huì)顯示.
?
36.123?gets converted to?36.1?.
?
36.15?gets converted to?36.2?.
?
36?gets converted to?36?.
?
如果使用同一個(gè)數(shù)字的整數(shù)參數(shù),“floatformat”輪數(shù),許多小數(shù)位:
?
36.1234?with floatformat:3 gets converted to?36.123?.
?
36?with floatformat:4 gets converted to?36.0000?.
?
If the argument passed to?floatformat?is negative, it will round a number to that many decimal places but only if theres a decimal part to be displayed:
?
36.1234?with floatformat:-3 gets converted to?36.123?.
?
36?with floatformat:-4 gets converted to?36?.
?
Using?floatformat?with no argument is equivalent to using?floatformat?with an argument of?-1?.
get_digit
Example:
{{ value|get_digit:"1" }}提供一個(gè)完整的數(shù), 返回該數(shù)中被請(qǐng)求的數(shù)字,其中 1 是最右邊的數(shù), 2 是從右邊數(shù)第二個(gè)數(shù)字等等. 若輸入值非法(若輸入或參數(shù)不是整數(shù), 或者參數(shù)小于1)則返回其原始值. 否則輸出就總是整數(shù).
join
例子:
{{ list|join:", " }}用一個(gè)字符串將一個(gè)列表連接起來(lái),類似 Python 的 str.join(list).
length
例子:
{{ list|length }}返回對(duì)象的長(zhǎng)度
length_is
Example:
{% if list|length_is:"3" %} ... {% endif %}若值的長(zhǎng)度與參數(shù)相等,返回 True, 否則返回 False.
linebreaks
Example:
{{ string|linebreaks }}把換行符轉(zhuǎn)換成<p>和<br />標(biāo)簽。
linebreaksbr
Example:
{{ string|linebreaksbr }}把每個(gè)新行轉(zhuǎn)換為”<br />”標(biāo)簽
linenumbers
Example:
{{ string|linenumbers }}帶行號(hào)顯示文本
ljust
Example:
{{ string|ljust:"50" }}在給定寬度的域內(nèi)將文本左對(duì)齊.
lower
Example:
{{ string|lower }}把一個(gè)給定的字符串轉(zhuǎn)換成小寫(xiě)。
make_list
Example:
{% for i in number|make_list %} ... {% endfor %}將值轉(zhuǎn)化為一個(gè)列表.對(duì)一個(gè)整數(shù),它是一個(gè)數(shù)字的列表.對(duì)一個(gè)字符串,這是一個(gè)字符的列表
phone2numeric
Example:
{{ string|phone2numeric }}將一個(gè)電話號(hào)碼(可能包含字母)轉(zhuǎn)化等價(jià)的數(shù)字值.比如: ‘800-COLLECT’ 將被轉(zhuǎn)化為 ‘800-2655328’.
輸入不一定非是一個(gè)合法號(hào)碼. 它可以轉(zhuǎn)化任意字符串.
pluralize
Example:
The list has {{ list|length }} item{{ list|pluralize }}.如果值不是 1 的話返回 ‘s’ 用于 ‘1 vote’ vs. ‘2 votes’ 這種場(chǎng)合
Example:
You have {{ num_messages }} message{{ num_messages|pluralize }}.For words that require a suffix other than?'s'?, you can provide an alternate suffix as a parameter to the filter.
Example:
You have {{ num_walruses }} walrus{{ num_walrus|pluralize:"es" }}.For words that dont pluralize by simple suffix, you can specify both a singular and plural suffix, separated by a comma.
Example:
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
pprint
Example:
{{ object|pprint }}pprint.pprint 和一個(gè)封裝器— 僅用于調(diào)試.
random
Example:
{{ list|random }}返回隨機(jī)的從列表中返回一個(gè)元素
removetags
Example:
{{ string|removetags:"br p div" }}從輸出中刪除單空格分隔的 [X]HTML標(biāo)簽 列表
rjust
Example:
{{ string|rjust:"50" }}在給定寬度的域內(nèi)將文本右對(duì)齊.
slice
Example:
{{ some_list|slice:":2" }}返回一個(gè)列表的片段
使用與 Python 的 list 相同的語(yǔ)法, 參閱http://diveintopython.org/native_data_types/lists.html#odbchelper.list.slice?以了解更詳細(xì)的信息.
slugify
Example:
{{ string|slugify }}轉(zhuǎn)化為小寫(xiě), 移去非單詞字符(字母數(shù)字和下劃線),將空白轉(zhuǎn)化為連字符,去除前后空白.
stringformat
Example:
{{ number|stringformat:"02i" }}根據(jù)給定參數(shù)(一個(gè)格式字符串)格式化一個(gè)變量, 這個(gè)格式字符串使用 Python 字符串格式化語(yǔ)法, 例外之處是 “%” 運(yùn)算符被省略.
參閱?http://docs.python.org/lib/typesseq-strings.html?以了解 Python 格式字符串
striptags
Example:
{{ string|striptags }}過(guò)濾掉[X]HTML標(biāo)簽.
time
Example:
{{ value|time:"P" }}按指定的樣式(樣式定義同now標(biāo)簽)來(lái)格式化一個(gè)時(shí)間對(duì)象
timesince
Examples:
{{ datetime|timesince }} {{ datetime|timesince:"other_datetime" }}格式化一個(gè)日期,這個(gè)日期是從給定日期到現(xiàn)在的天數(shù)和小時(shí)數(shù)(比如: “4 days, 6 hours”).
接受一個(gè)可選的參數(shù),該參數(shù)是一個(gè)包含比較日期的變量(該參數(shù)默認(rèn)值是 now). 舉例來(lái)說(shuō), 如果 blog_date 是一個(gè)日期實(shí)例表示 2006-06-01 午夜, 而 comment_date 是一個(gè)日期實(shí)例表示 2006-06-01 早上8點(diǎn),那么 {{ comment_date|timesince:blog_date }} 將返回 “8 hours”.
timeuntil
Examples:
{{ datetime|timeuntil }} {{ datetime|timeuntil:"other_datetime" }}類似 timesince, 只是它比較當(dāng)前時(shí)間直到給定日期時(shí)間。舉例來(lái)說(shuō),如果今天是 2006-06-01 而 conference_date 是 2006-06-29, 那么 {{ conference_date|timeuntil }} 將返回 “28 days”.
接受一個(gè)可選的參數(shù),該參數(shù)是一個(gè)包含比較日期的變量(該參數(shù)默認(rèn)值是 now). 舉例來(lái)說(shuō), 如果 from_date 是一個(gè)日期實(shí)例表示 2006-06-22, 那么 {{ conference_date|timeuntil:from_date }} 會(huì)返回 “7 days”.
title
Example:
{{ string|titlecase }}按標(biāo)題格式轉(zhuǎn)化一個(gè)字符串
truncatewords
Example:
{{ string|truncatewords:"15" }}將一個(gè)字符串截短為指定數(shù)目的單詞.
truncatewords_html
Example:
{{ string|truncatewords_html:"15" }}Similar to?truncatewords?, except that it is aware of HTML tags. Any tags that are opened in the string and not closed before the truncation point are closed immediately after the truncation.
This is less efficient than?truncatewords?, so it should be used only when it is being passed HTML text.
unordered_list
Example:
<ul> {{ list|unordered_list }} </ul>遞歸的接受一個(gè)自嵌套的列表并返回一個(gè)HTML無(wú)序列表(此列表可不是pythob語(yǔ)義中的列表) — 只是沒(méi)有開(kāi)始和結(jié)束的<ul>標(biāo)簽
假定該列表是合適的格式. 舉例來(lái)說(shuō), 如果 var 的值為 [‘States’, [[‘Kansas’, [[‘Lawrence’, []], [‘Topeka’, []]]], [‘Illinois’, []]]], 那么 {{ var|unordered_list }} 就會(huì)返回:
<li>States <ul> <li>Kansas <ul> <li>Lawrence</li> <li>Topeka</li> </ul> </li> <li>Illinois</li> </ul> </li>
upper
例子:
{{ string|upper }}將一個(gè)字符串全部字母改為大寫(xiě)。
urlencode
例子:
<a href="{{ link|urlencode }}">linkage</a>轉(zhuǎn)義該值以用于 URL.
urlize
例子:
{{ string|urlize }}將URLs由純文本變?yōu)榭牲c(diǎn)擊的鏈接。
urlizetrunc
例子:
{{ string|urlizetrunc:"30" }}將URLs變?yōu)榭牲c(diǎn)擊的鏈接,按給定字母限截短URLs。
wordcount
例如:
{{ string|wordcount }}返回單詞數(shù)。
wordwrap
例如:
{{ string|wordwrap:"75" }}在指定長(zhǎng)度將文字換行。
yesno
例如:
{{ boolean|yesno:"Yes,No,Perhaps" }}提供一個(gè)字符串參數(shù)對(duì)應(yīng)著 true, false 和 (可選的) None, 根據(jù)被處理的值返回相應(yīng)的字符串:
| True | "yeah,no,maybe" | yeah |
| False | "yeah,no,maybe" | no |
| None | "yeah,no,maybe" | maybe |
| None | "yeah,no" | "no"?(如果不存在?None?的映射,將?None?變?yōu)?False) |
轉(zhuǎn)載于:https://www.cnblogs.com/Simon-xm/p/3891551.html
總結(jié)
以上是生活随笔為你收集整理的Django内建模版标签和过滤器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring Data JPA 查询方法
- 下一篇: Cocos2d-x项目移植到WP8小记