37.Python自定義過濾器

自定義模板過濾器

1.首先在某個app中,建立一個python包,叫作「templatetags」,注意,這個包的名字必定要是「templatetags」,否者的話,就會找不到定義的過濾器。
2.在建立的tamplatetags包下面,建立一個python文件,用來存儲過濾器。
3.在新建的python文件中,定義過濾器(也就是函數),這個函數的第一個參數必定是被過濾的那個參數,而且若是在使用過濾器的時候要從視圖函數中傳遞一個參數的話,就能夠在過濾器中再定義一個參數,可是注意,過濾器函數最多隻能有兩個參數。
4.在寫完過濾器函數以後,必定要把過濾器進行註冊,不註冊,不會進行執行定義的過濾器函數的。首先要使用django.template.Library.filter進行註冊。
5.還要把這個過濾器所在的這個app添加到「settings.py」中的INSTALLD_APPS中,否者的話,就找不到這個app。
6.在模板中使用「load」標籤進行加載過濾器所在的python包。
7.以後就能夠進行傳遞參數,使用過濾器了。

示例代碼以下:html

views.py中代碼以下:
from django.shortcuts import render


def index(request):
    context = {
        'value':'Hello'
    }
    return render(request,'index.html',context=context)
在urls.py中進行視圖與url的映射:
from django.urls import path
from article import views

urlpatterns = [
    path('',views.index, name = 'index'),
]
自定義的過濾器所在文件:my_fliter.py
from django import template


# 定義一個類
register = template.Library()


# 設置默認值,若是不從視圖函數中船機來參數值的話,就爲默認值None
def greet(value,word=None):
    return value + word


# filter()函數中第一個參數爲:過濾器的名字,第二個參數爲函數的名稱
register.filter("greet",greet)
在DTL模板index.html中進行使用自定義的過濾器:
{#  若是想要使用自定義的過濾器的話,就必需要先導入 ,導入的名稱爲自定義過濾器所處的文件名 #}
{#  必需要把app安裝到settings.pyw文件中  #}
{% load my_fliter %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ value|greet:'小螞蟻' }}
</body>
</html>
運行結果如圖所示:

在這裏插入圖片描述

相關文章
相關標籤/搜索