您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在Django中使用過濾器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Django 過濾器
過濾器 | 描述 | 示例 |
upper | 以大寫方式輸出 | {{ user.name | upper }} |
add | 給value加上一個數值 | {{ user.age | add:”5” }} |
addslashes | 單引號加上轉義號 | |
capfirst | 第一個字母大寫 | {{ ‘good'| capfirst }} 返回”Good” |
center | 輸出指定長度的字符串,把變量居中 | {{ “abcd”| center:”50” }} |
cut | 刪除指定字符串 | {{ “You are not a Englishman” | cut:”not” }} |
date | 格式化日期 | |
default | 如果值不存在,則使用默認值代替 | {{ value | default:”(N/A)” }} |
default_if_none | 如果值為None, 則使用默認值代替 | |
dictsort | 按某字段排序,變量必須是一個dictionary | {% for moment in moments | dictsort:”id” %} |
dictsortreversed | 按某字段倒序排序,變量必須是dictionary | |
divisibleby | 判斷是否可以被數字整除 | {{ 224 | divisibleby:2 }} 返回 True |
escape | 按HTML轉義,比如將”<”轉換為”<” | |
filesizeformat | 增加數字的可讀性,轉換結果為13KB,89MB,3Bytes等 | {{ 1024 | filesizeformat }} 返回 1.0KB |
first | 返回列表的第1個元素,變量必須是一個列表 | |
floatformat | 轉換為指定精度的小數,默認保留1位小數 | {{ 3.1415926 | floatformat:3 }} 返回 3.142 四舍五入 |
get_digit | 從個位數開始截取指定位置的數字 | {{ 123456 | get_digit:'1'}} |
join | 用指定分隔符連接列表 | {{ [‘abc','45'] | join:'*' }} 返回 abc*45 |
length | 返回列表中元素的個數或字符串長度 | |
length_is | 檢查列表,字符串長度是否符合指定的值 | {{ ‘hello'| length_is:'3' }} |
linebreaks | 用<p>或<br>標簽包裹變量 | {{ “Hi\n\nDavid”|linebreaks }} 返回<p>Hi</p><p>David</p> |
linebreaksbr | 用<br/>標簽代替換行符 | |
linenumbers | 為變量中的每一行加上行號 | |
ljust | 輸出指定長度的字符串,變量左對齊 | {{‘ab'|ljust:5}}返回 ‘ab ' |
lower | 字符串變小寫 | |
make_list | 將字符串轉換為列表 | |
pluralize | 根據數字確定是否輸出英文復數符號 | |
random | 返回列表的隨機一項 | |
removetags | 刪除字符串中指定的HTML標記 | {{value | removetags: “h2 h3”}} |
rjust | 輸出指定長度的字符串,變量右對齊 | |
slice | 切片操作, 返回列表 | {{[3,9,1] | slice:':2'}} 返回 [3,9] {{ 'asdikfjhihgie' | slice:':5' }} 返回 ‘asdik' |
slugify | 在字符串中留下減號和下劃線,其它符號刪除,空格用減號替換 | {{ '5-2=3and5 2=3' | slugify }} 返回 5-23and5-23 |
stringformat | 字符串格式化,語法同python | |
time | 返回日期的時間部分 | |
timesince | 以“到現在為止過了多長時間”顯示時間變量 | 結果可能為 45days, 3 hours |
timeuntil | 以“從現在開始到時間變量”還有多長時間顯示時間變量 | |
title | 每個單詞首字母大寫 | |
truncatewords | 將字符串轉換為省略表達方式 | {{ 'This is a pen' | truncatewords:2 }}返回 This is ... |
truncatewords_html | 同上,但保留其中的HTML標簽 | {{ '<p>This is a pen<;' | truncatewords:2 }}返回 <p>This is ...<; |
urlencode | 將字符串中的特殊字符轉換為url兼容表達方式 | {{ ‘http://www.aaa.com/foo?a=b&b=c' | urlencode}} |
urlize | 將變量字符串中的url由純文本變為鏈接 | |
wordcount | 返回變量字符串中的單詞數 | |
yesno | 將布爾變量轉換為字符串yes, no 或maybe | {{ True | yesno }} {{ False | yesno }} {{ None | yesno }} 返回 yes no maybe |
自定義過濾器:
第一步: 在app目錄下創建包 templatetags
在templatetags下創建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): #分頁: 固定顯示前后5頁 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: #這里一定要返回一個空字符串,否則在前端會顯示一系列的None return ''
自定義過濾器函數filter
因為sample_tag不能使用if判斷,所以才有了它
最多只能有兩個參數,一個是變量值,一個是選項值
from django import template from django.utils.html import format_html import datetime register = template.Library() @register.filter def time_color(exp_date): #給一個月內到期的html標簽加上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引用
在文件開頭導入
{% 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>
上述內容就是如何在Django中使用過濾器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。