學習筆記,僅供參考
參考自: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 !