自定義過濾器
過濾器就是python中的函數,註冊後就可以在模板中當作過濾器使用
Django中的使用模板的自定義過濾器
在項目的應用下創建templatetags的Python的包
然後建立過濾器的文件,編寫過濾器函數
三步驟:
1.創建templatetags的包(即目錄裏面有__init__.py文件)
2.創建過濾器的py
3.到創建的py裏面導入 from django.template import Library
4. 創建一個Library類的對象 register = Library()
5.編寫處理函數 對函數使用裝飾器 @register.filter
6.然後在模板中進行使用 需要導入 {% load filters %} 導入後就和其他的過濾器一樣來使用
舉例
新建一個項目和應用,然後配置模板目錄,以及url
在應用的目錄下面創建Python的包 templatetags
創建一個視圖函數,加載頁面,然後傳遞一個列表到前端
def index(request): """傳遞一個列表給頁面,然後使用自定義過濾器""" ex_list = [1, 2, 3, 4, 5, 6, 7, 8] return render(request, 'index.html', {'ex_list': ex_list})
在創建 templatetags 的目錄下創建filters.py來編寫視圖函數
""" 自定義過濾器 過濾器其實就是Python函數 自定義的過濾器函數,至少有一個參數,最多兩個參數 """ from django.template import Library '''創建一個Library類的對象''' register = Library() '''使用裝飾器進行註冊''' @register.filter def mod(num): """判斷num是否大於2,或者小於6""" return 2 < num < 6 @register.filter() def mod_val(num,val): """判斷num是否能被val整除""" return num%val == 0
然後在前端頁面中使用 注意:使用自定義的過濾器時,要在前端頁面進行導入 {% load filters %}
<!DOCTYPE html> <html lang="en"> {% load filters %} <head> <meta charset="UTF-8"> <title>Title</title> <style> .red { background-color: red; } .blue { background-color: blue; } .green { background-color: green; } </style> </head> <body> <div> <h2>自定義過濾器函數,一個參數</h2> <ul> {% for i in ex_list %} {% if i <= 2 %} <li class="red">小於等於2的爲紅色---值爲{{ i }}</li> {% elif i|mod %} <li class="blue">大於2小於6的爲藍色---值爲{{ i }}</li> {% else %} <li class="green">其他的爲綠色---值爲{{ i }}</li> {% endif %} {% endfor %} </ul> </div> <br/> <br/> <div> <h2>自定義過濾器函數,兩個參數</h2> <ul> {% for i in ex_list %} {% if i|mod_val:2 %} <li class="green">{{ i }}能被2整除</li> {% endif %} {% endfor %} </ul> </div> </body> </html>
然後運行程序,可以看到已經成功的使用了自定義的過濾器