Django框架(24.Django中的模板的自定義過濾器)

自定義過濾器

過濾器就是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>

然後運行程序,可以看到已經成功的使用了自定義的過濾器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章