過濾器(filter)


作用:

Django過濾器的作用是對管道符 ‘|’前面的變量進行修飾 然后在頁面中顯示修飾后的結果

語法:

{{變量名|filter_name:參數}} 

 

 

注意事項:

    1. 過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
    2. 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
    3. 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
    4. '|'左右沒有空格沒有空格沒有空格 

內置過濾器:

 

一、形式:小寫 {{ name | lower }}

二、串聯:先轉義文本到HTML,再轉換每行到 <p> 標簽 {{ my_text|escape|linebreaks }}

三、過濾器的參數 顯示前30個字 {{ bio | truncatewords:"30" }}

格式化 {{ pub_date | date:"F j, Y" }}

 

過濾器列表

{{ 123|add:"5" }} 給value加上一個數值

{{ "AB'CD"|addslashes }} 單引號加上轉義號,一般用於輸出到javascript中

{{ "abcd"|capfirst }} 第一個字母大寫

{{ "abcd"|center:"50" }} 輸出指定長度的字符串,並把值對中

{{ "123spam456spam789"|cut:"spam" }} 查找刪除指定字符串

{{ value|date:"F j, Y" }} 格式化日期

{{ value|default:"(N/A)" }} 值不存在,使用指定值

{{ value|default_if_none:"(N/A)" }} 值是None,使用指定值

{{ 列表變量|dictsort:"數字" }} 排序從小到大

{{ 列表變量|dictsortreversed:"數字" }} 排序從大到小

{% if 92|divisibleby:"2" %} 判斷是否整除指定數字

 

{{ string|escape }} 轉換為html實體

{{ 21984124|filesizeformat }} 以1024為基數,計算最大值,保留1位小數,增加可讀性

{{ list|first }} 返回列表第一個元素

{{ "ik23hr&jqwh"|fix_ampersands }} &轉為&amp;

{{ 13.414121241|floatformat }} 保留1位小數,可為負數,幾種形式

{{ 13.414121241|floatformat:"2" }} 保留2位小數

{{ 23456 |get_digit:"1" }} 從個位數開始截取指定位置的1個數字

 

{{ list|join:", " }} 用指定分隔符連接列表

{{ list|length }} 返回列表個數

{% if 列表|length_is:"3" %} 列表個數是否指定數值

{{ "ABCD"|linebreaks }} 用新行用<p> 、 <br /> 標記包裹

{{ "ABCD"|linebreaksbr }} 用新行用<br /> 標記包裹

{{ 變量|linenumbers }} 為變量中每一行加上行號

{{ "abcd"|ljust:"50" }} 把字符串在指定寬度中對左,其它用空格填充

 

{{ "ABCD"|lower }} 小寫

{% for i in "1abc1"|make_list %}ABCDE,{% endfor %} 把字符串或數字的字符個數作為一個列表

{{ "abcdefghijklmnopqrstuvwxyz"|phone2numeric }} 把字符轉為可以對應的數字??

{{ 列表或數字|pluralize }} 單詞的復數形式,如列表字符串個數大於1,返回s,否則返回空串

 

{{ 列表或數字|pluralize:"es" }} 指定es

{{ 列表或數字|pluralize:"y,ies" }} 指定ies替換為y

{{ object|pprint }} 顯示一個對象的值

{{ 列表|random }} 返回列表的隨機一項

{{ string|removetags:"br p div" }} 刪除字符串中指定html標記

{{ string|rjust:"50" }} 把字符串在指定寬度中對右,其它用空格填充

 

{{ 列表|slice:":2" }} 切片

{{ string|slugify }} 字符串中留下減號和下划線,其它符號刪除,空格用減號替換

{{ 3|stringformat:"02i" }} 字符串格式,使用Python的字符串格式語法

{{ "E<A>A</A>B<C>C</C>D"|striptags }} 剝去[X]HTML語法標記

{{ 時間變量|time:"P" }} 日期的時間部分格式

{{ datetime|timesince }} 給定日期到現在過去了多少時間

{{ datetime|timesince:"other_datetime" }} 兩日期間過去了多少時間

 

{{ datetime|timeuntil }} 給定日期到現在過去了多少時間,與上面的區別在於2日期的前后位置。

{{ datetime|timeuntil:"other_datetime" }} 兩日期間過去了多少時間

{{ "abdsadf"|title }} 首字母大寫

{{ "A B C D E F"|truncatewords:"3" }} 截取指定個數的單詞

{{ "<a>1<a>1<a>1</a></a></a>22<a>1</a>"|truncatewords_html:"2" }} 截取指定個數的html標記,並補完整

<ul>{{ list|unordered_list }}</ul> 多重嵌套列表展現為html的無序列表

 

{{ string|upper }} 全部大寫

<a href="{{ link|urlencode }}">linkage</a> url編碼

{{ string|urlize }} 將URLs由純文本變為可點擊的鏈接。(沒有實驗成功)

{{ string|urlizetrunc:"30" }} 同上,多個截取字符數。(同樣沒有實驗成功)

 

{{ "B C D E F"|wordcount }} 單詞數

{{ "a b c d e f g h i j k"|wordwrap:"5" }} 每指定數量的字符就插入回車符

{{ boolean|yesno:"Yes,No,Perhaps" }} 對三種值的返回字符串,對應是 非空,空,None

 

日起格式化

{{ pub_date | date:"F j, Y" }} 

日期格式化參數

格式化字符 描述 示例輸出
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) 。 2008-01-02T10:30:00.000123+02:002008-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 布爾值是否是一個閏年。 TrueFalse
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格式化日期。 '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周數,周數從星期一開始。 153
y 年份,2位數字。 '99'
Y 年,4位數。 '1999年'
z 一年中的日子 0365
Z 時區偏移量,單位為秒。 UTC以西時區的偏移量總是為負數,對於UTC以東時,它們總是為正。 -4320043200

 

 

 

自定義過濾器:

因為內置過濾器滿足不了我們,所以需要自定義過濾器,只需要遵循Django的規則創建即可

 

自定義filter的創建及使用:

創建:

  1.在app目錄下創建templatetags的package包

  2.然后在templatetags下創建一個python文件:my_filters.py

  3.在py文件內寫函數:def filter_name(value,arg):     # value參數是管道符前面需要修改的變量,arg是過濾器的‘:’后面的參數

  4.導入包from Django import template

  5.register  = template.Library()

  6.對my_filter函數進行裝飾  @register.filter

使用:

  1.重啟django項目

  2.模板中需要導入my_filters.py文件 {% load my_filters %}

  3.使用自定義過濾器{{變量|filter_name:arg}}有arg參數 或 {{變量|filter_name}} 沒有arg參數  

 

  注:

    1.函數名可以作為過濾器名在django的模板中使用,或者可以在裝飾器中對名字進行設置@register.filter(name='filter_name')

自定義filter參數的擴展:

filter的參數除了要修飾的變量外最多只能有一個參數,如果需要多個參數的情況時,可以傳入多個參數中間用','隔開

例:

  {{變量名|filter_name:'參數1,參數2,參數3'}}     # 這種方式只能是字符串的形式

  后端過濾器函數進行處理時可以用arg.split(',')方法來獲取到多個參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM