1. 程式人生 > >Django中自定義過濾器的使用

Django中自定義過濾器的使用

sof html views charset 展示 set etag 很多 back

我在這裏做的是: 從數據庫查出id遞增的一些信息,展示在前臺。

編寫一個過濾器判斷查出數據的id是偶數的返回True 奇數返回False

1 創建項目,創建應用,註冊應用,配置settings.py文件,配置urls映射,編寫views試圖,編寫模板templates,編寫models模塊

切記 註冊應用。 很多夥伴找不到自己定義的過濾器,是因為忘記註冊應用!

2 創建過濾器的目錄:

實際上,在項目目錄或者應用目錄下創建都是可以的,創建一個名為templatetags的python模塊

技術分享

在我這裏,booktest是一個應用,templatetags 是存放過濾器的模塊,,模塊和目錄的區別是 模塊裏面必須有__init__.py,告訴python這是可以import的東西

在templatetags模塊裏,建立一個py文件,寫我們的自定義過濾器,文件名稱可以自己定,這裏我用filters.py

3 過濾器的編寫:

1 from django.template import Library
2 
3 register = Library()
4 
5 #一個偶數為真的過濾器
6 @register.filter # @register.filter(name=‘odd‘)  過濾器裏面有很多選項
7 def odd(num ):
8   return num%2==0

過濾器必須用Library().filter 來進行裝飾, name表示過濾器的名字,也可以不指定,函數名就是過濾的名字

裝飾後的函數,才能當作過濾器來使用

4 模板文件引入過濾器和使用

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 {# 必須用這一句去引用過濾器 filters是我過濾器所在py文件的名字 #}
 5 {% load filters %}
 6 
 7 <head>
 8     <meta charset="UTF-8">
 9     <title>Title</title>
10     <style>
11         .red{
12             background-color
: red; 13 } 14 .gold{ 15 background-color: gold; 16 } 17 </style> 18 </head> 19 <body> 20 <ul> 21 {% for book in books %} 22 {# 使用過濾器 #} 23 {% if book.id|odd %} 24 <li class="red"> 25 {{ book.id }}----{{ book.btitle }}----{{ book.bpub_date|date:‘Y-m-d‘ }} 26 </li> 27 {% else %} 28 <li class="gold" > 29 {{ book.id }}----{{ book.btitle }}----{{ book.bpub_date|date:‘Y-m-d‘ }} 30 </li> 31 {% endif %} 32 {% endfor %} 33 34 </ul> 35 36 <ul> 37 {% for hero in heros %} 38 <li >{{ hero.id }}----{{ hero.hname }}</li> 39 {% endfor %} 40 41 </ul> 42 43 </body> 44 </html>

在模板中必須用{%load name%} 來引入我們的過濾器函數所在的py文件,name是py文件的名字 這裏我的事filters

之後 如果使用過濾器那麽就直接 變量|過濾器 就可以了。

{# 必須用這一句去引用過濾器 filters是我過濾器所在py文件的名字 #}
{% load filters %}

{#  使用過濾器  #}
    {% if book.id|odd %}
        <li class="red">
            {{ book.id }}----{{ book.btitle }}----{{ book.bpub_date|date:‘Y-m-d‘ }}
        </li>
    {% else %}

我做的是 id是基數和偶數分別改變不同的背景色。

Django中自定義過濾器的使用