Django 過(guò)濾器匯總及自定義過(guò)濾器使用詳解
Django 過(guò)濾器
過(guò)濾器 | 描述 | 示例 |
upper | 以大寫(xiě)方式輸出 | {{ user.name | upper }} |
add | 給value加上一個(gè)數(shù)值 | {{ user.age | add:”5” }} |
addslashes | 單引號(hào)加上轉(zhuǎn)義號(hào) | |
capfirst | 第一個(gè)字母大寫(xiě) | {{ ‘good'| capfirst }} 返回”Good” |
center | 輸出指定長(zhǎng)度的字符串,把變量居中 | {{ “abcd”| center:”50” }} |
cut | 刪除指定字符串 | {{ “You are not a Englishman” | cut:”not” }} |
date | 格式化日期 | |
default | 如果值不存在,則使用默認(rèn)值代替 | {{ value | default:”(N/A)” }} |
default_if_none | 如果值為None, 則使用默認(rèn)值代替 | |
dictsort | 按某字段排序,變量必須是一個(gè)dictionary | {% for moment in moments | dictsort:”id” %} |
dictsortreversed | 按某字段倒序排序,變量必須是dictionary | |
divisibleby | 判斷是否可以被數(shù)字整除 | {{ 224 | divisibleby:2 }} 返回 True |
escape | 按HTML轉(zhuǎn)義,比如將”<”轉(zhuǎn)換為”<” | |
filesizeformat | 增加數(shù)字的可讀性,轉(zhuǎn)換結(jié)果為13KB,89MB,3Bytes等 | {{ 1024 | filesizeformat }} 返回 1.0KB |
first | 返回列表的第1個(gè)元素,變量必須是一個(gè)列表 | |
floatformat | 轉(zhuǎn)換為指定精度的小數(shù),默認(rèn)保留1位小數(shù) | {{ 3.1415926 | floatformat:3 }} 返回 3.142 四舍五入 |
get_digit | 從個(gè)位數(shù)開(kāi)始截取指定位置的數(shù)字 | {{ 123456 | get_digit:'1'}} |
join | 用指定分隔符連接列表 | {{ [‘a(chǎn)bc','45'] | join:'*' }} 返回 abc*45 |
length | 返回列表中元素的個(gè)數(shù)或字符串長(zhǎng)度 | |
length_is | 檢查列表,字符串長(zhǎng)度是否符合指定的值 | {{ ‘hello'| length_is:'3' }} |
linebreaks | 用<p>或<br>標(biāo)簽包裹變量 | {{ “Hi\n\nDavid”|linebreaks }} 返回<p>Hi</p><p>David</p> |
linebreaksbr | 用<br/>標(biāo)簽代替換行符 | |
linenumbers | 為變量中的每一行加上行號(hào) | |
ljust | 輸出指定長(zhǎng)度的字符串,變量左對(duì)齊 | {{‘a(chǎn)b'|ljust:5}}返回 ‘a(chǎn)b ' |
lower | 字符串變小寫(xiě) | |
make_list | 將字符串轉(zhuǎn)換為列表 | |
pluralize | 根據(jù)數(shù)字確定是否輸出英文復(fù)數(shù)符號(hào) | |
random | 返回列表的隨機(jī)一項(xiàng) | |
removetags | 刪除字符串中指定的HTML標(biāo)記 | {{value | removetags: “h1 h2”}} |
rjust | 輸出指定長(zhǎng)度的字符串,變量右對(duì)齊 | |
slice | 切片操作, 返回列表 | {{[3,9,1] | slice:':2'}} 返回 [3,9] {{ 'asdikfjhihgie' | slice:':5' }} 返回 ‘a(chǎn)sdik' |
slugify | 在字符串中留下減號(hào)和下劃線(xiàn),其它符號(hào)刪除,空格用減號(hào)替換 | {{ '5-2=3and5 2=3' | slugify }} 返回 5-23and5-23 |
stringformat | 字符串格式化,語(yǔ)法同python | |
time | 返回日期的時(shí)間部分 | |
timesince | 以“到現(xiàn)在為止過(guò)了多長(zhǎng)時(shí)間”顯示時(shí)間變量 | 結(jié)果可能為 45days, 3 hours |
timeuntil | 以“從現(xiàn)在開(kāi)始到時(shí)間變量”還有多長(zhǎng)時(shí)間顯示時(shí)間變量 | |
title | 每個(gè)單詞首字母大寫(xiě) | |
truncatewords | 將字符串轉(zhuǎn)換為省略表達(dá)方式 | {{ 'This is a pen' | truncatewords:2 }}返回 This is ... |
truncatewords_html | 同上,但保留其中的HTML標(biāo)簽 | {{ '<p>This is a pen<;' | truncatewords:2 }}返回 <p>This is ...<; |
urlencode | 將字符串中的特殊字符轉(zhuǎn)換為url兼容表達(dá)方式 | {{ ‘http://www.aaa.com/foo?a=b&b=c' | urlencode}} |
urlize | 將變量字符串中的url由純文本變?yōu)殒溄?/td> | |
wordcount | 返回變量字符串中的單詞數(shù) | |
yesno | 將布爾變量轉(zhuǎn)換為字符串yes, no 或maybe | {{ True | yesno }} {{ False | yesno }} {{ None | yesno }} 返回 yes no maybe |
自定義過(guò)濾器:
第一步: 在app目錄下創(chuàng)建包 templatetags
在templatetags下創(chuàng)建py文件,文件名隨意,比如
自定義simple_tag, 不能在模板中使用if判斷
from django import template from django.utils.html import format_html import datetime register = template.Library() @register.simple_tag def page_cut(current_page, loop_page): #分頁(yè): 固定顯示前后5頁(yè) differ = abs(current_page - loop_page) if differ < 5: li = '''<li class=""><a href="?page=%s" rel="external nofollow" >%s<span class="sr-only">(current)</span></a></li>''' % (loop_page, loop_page) return format_html(li) else: #這里一定要返回一個(gè)空字符串,否則在前端會(huì)顯示一系列的None return ''
自定義過(guò)濾器函數(shù)filter
因?yàn)閟ample_tag不能使用if判斷,所以才有了它
最多只能有兩個(gè)參數(shù),一個(gè)是變量值,一個(gè)是選項(xiàng)值
from django import template from django.utils.html import format_html import datetime register = template.Library() @register.filter def time_color(exp_date): #給一個(gè)月內(nèi)到期的html標(biāo)簽加上class屬性 startdate = datetime.datetime.now().date() enddate = startdate + datetime.timedelta(30) if (enddate - exp_date).days > 0 and (enddate - exp_date).days <= 30: td = '''<td class="%s">%s</td>''' % ('exp_date', exp_date) return format_html(td) elif (enddate - exp_date).days > 30: td = '''<td class="outof">%s</td>''' % (exp_date) return format_html(td) else: td = '''<td>%s</td>''' % (exp_date) return format_html(td)
第二步,html引用
在文件開(kāi)頭導(dǎo)入
{% load my_page %}
使用
<tbody> {% for project in projects_list %} <tr> <td><a href="{% url 'projects_detail' project.id %}" rel="external nofollow" >{{ project.com_name }}</a></td> <td>{{ project.name}}</td> <td>{{ project.domain }}</td> <td>{{ project.get_status_display }}</td> {{ project.exp_date|time_color }} <td>{{ project.ftp }}</td> </tr> {% endfor %} </tbody>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在Django的session中使用User對(duì)象的方法
這篇文章主要介紹了在Django的session中使用User對(duì)象的方法,Django是眾Python web開(kāi)發(fā)框架中人氣最高的一個(gè),需要的朋友可以參考下2015-07-07Python標(biāo)準(zhǔn)庫(kù)之Sys模塊使用詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)之Sys模塊使用詳解,本文講解了使用sys模塊獲得腳本的參數(shù)、處理模塊、使用sys模塊操作模塊搜索路徑、使用sys模塊查找內(nèi)建模塊、使用sys模塊查找已導(dǎo)入的模塊等使用案例,需要的朋友可以參考下2015-05-05Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)
本文主要介紹了Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Django 多表關(guān)聯(lián) 存儲(chǔ) 使用方法詳解 ManyToManyField save
今天小編就為大家分享一篇Django 多表關(guān)聯(lián) 存儲(chǔ) 使用方法詳解 ManyToManyField save,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08python單機(jī)五子棋的代碼實(shí)現(xiàn)示例
五子棋是經(jīng)典的棋牌類(lèi)游戲,很多人都玩過(guò),那么如何用Python實(shí)現(xiàn)五子棋呢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意
這篇文章主要介紹了python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python擴(kuò)展庫(kù)numpy入門(mén)教程
這篇文章主要為大家介紹了python擴(kuò)展庫(kù)numpy入門(mén)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11