天天看點

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

Django架構(24.Django中的模闆的自定義過濾器)自定義過濾器 舉例
  建立一個視圖函數,加載頁面,然後傳遞一個清單到前端
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 >
{% 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>
           
然後運作程式,可以看到已經成功的使用了自定義的過濾器
Django架構(24.Django中的模闆的自定義過濾器)自定義過濾器 舉例