在Django中自定義filter並在template中使用

Django內置的filter有很多,然而我們由於業務邏輯的特殊要求,有時候仍然會不夠用,這個時候就需要我們自定義filter來實現相應的內容。接下來讓我們從自定義一個get_range(value)來產生列表的filter開始吧。

首先在你的django app的models.py的同級目錄建立一個templatetags的文件夾,並在裏面新建一個init.py的空文件,這個文件確保了這個文件夾被當做一個python的包。在添加了templatetags模塊之後,我們需要重新啓動服務器才能使其有效。

polls/
    __init__.py
    models.py
    templatetags/
        __init__.py
    views.py

然後在templatetags中新建一個python文件,文件名就是以後需要加載到頁面的自定義庫的名字。在這裏我們新建一個generalfilters.py文件。

polls/
    __init__.py
    models.py
    templatetags/
        __init__.py
        generalfilters.py
    views.py

爲了讓庫生效,必須在文件裏添加一個模塊級別的register變量。它是template.Library的實例,確保了標籤和過濾器的有效性。

編輯generalfilters.py,添加

from django import template
register=template.Library()
@register.filter
def get_range(value):
    return range(value)

上述代碼中定義了一個生成列表的函數,@register.filter表示這個函數是一個過濾器。至此我們的生成列表的過濾器就已經寫好了。接下來我們需要把這個過濾器的庫加載到模板裏。

在你想要使用的模板的頂部加上{% load generalfilters %},就可以使用這個過濾器了。

{% for i in 5|get_range_bet_within %}
   {{i}}
{% endfor %}

運行結果
運行結果

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