Django中自定義過濾器的使用
阿新 • • 發佈:2017-09-20
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中自定義過濾器的使用