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轉義,好比將」<」轉換爲」&lt」  
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: 「h1 h2」}}
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</p>' | truncatewords:2 }}返回
<p>This is ...</p>
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目錄下建立包 templatetagshtml

在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">%s<span class="sr-only">(current)</span></a></li>''' % (loop_page, loop_page)
        return format_html(li)
    else:
        #這裏必定要返回一個空字符串,不然在前端會顯示一系列的None
        return ''

 

自定義過濾器函數filterpython

由於sample_tag不能使用if判斷,因此纔有了它git

最多隻能有兩個參數,一個是變量值,一個是選項值django

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引用 app

在文件開頭導入dom

{% load my_page %}函數

使用oop

<tbody>
        {% for project in projects_list %}
        <tr>
            <td><a href="{% url 'projects_detail' project.id %}">{{ 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>
<!-- 頁碼導航 -->
<nav>
  <ul class="pagination">
    {% if projects_list.has_previous %}
        <li class=""><a href="?page={{ projects_list.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
    {% endif %}

    {% for page_num in projects_list.paginator.page_range %}
     {% if page_num == projects_list.number %}
        <li class="active"><a href="?page={{ page_num }}">{{ page_num }}<span class="sr-only">(current)</span></a></li>
     {% else %}
         #分頁標籤
        {% page_cut projects_list.number page_num %}
     {% endif %}
    {% endfor %}

    {% if projects_list.has_next %}
        <li class=""><a href="?page={{ projects_list.next_page_number }}" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>
    {% endif %}
  </ul>
</nav>
相關文章
相關標籤/搜索