Django從理論到實戰(part21)--自定義模板過濾器

學習筆記,僅供參考

參考自:Django打造大型企業官網–Huang Y;

本系列Blog以應用爲主,理論基礎部分我在後端專欄Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,儘量詳細的記錄一下。



自定義模板過濾器


理論

Django給我們提供了一個接口,可以讓我們自定義過濾器,實現自己的需求。

過濾器實際上就是python中的一個函數,只不過是把這個函數註冊到模板庫中,以後在模板中就可以使用這個函數了,但是這個函數的參數有限制,第一個參數必須是這個過濾器需要處理的值,第二個參數可有可無,如果有,那麼就意味着在模板中可以傳遞參數,並且過濾器的函數最多隻能有兩個參數。寫完過濾器後,需要使用django.template.Library對象將自定義過濾器進行註冊。


實踐


  • 創建templatetags包

我們在項目newwebsite2的應用book下創建一個templatetags包:


  • 創建自定義過濾器

在這個包下面創建一個python文件,我們命名爲my_filter.py

from django import template

# 創建模板庫對象
register = template.Library()

# 過濾器函數
def mycut(value,mystr):
    return value.replace(mystr, "-")

# 將函數註冊到模板庫中
register.filter("mycut",mycut)

register.filter方法中第一個參數爲自定義過濾器的名字,第二個參數爲自定義過濾器所對應的函數


  • 安裝app

打開settings.py文件,並將app安裝到INSTALLED_APPS列表中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book',
]

  • 創建模板文件

如果想在模板中使用這個自定義過濾器,就要在模板中load一下這個過濾器所在的模塊的名字(也就是這個python文件的名字)。


在templates文件夾中,創建模板文件my_cut.html:

{% load my_filter %}
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>小黃之家</title>
</head>
<body>
    <p>
        {{ "馬鞍山"|mycut:"鞍" }}
    </p>

</body>
</html>

  • 發起請求

我們向http://127.0.0.1:8000/my_cut/發起請求:

Very Well !


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