Django从理论到实战(part21)--自定义模板过滤器
學(xué)習(xí)筆記,僅供參考
參考自:Django打造大型企業(yè)官網(wǎng)–Huang Y;
本系列Blog以應(yīng)用為主,理論基礎(chǔ)部分我在后端專(zhuān)欄的Django系列博客已經(jīng)寫(xiě)過(guò)了,如果有些需要補(bǔ)充的知識(shí)點(diǎn),我會(huì)在這個(gè)系列中,盡量詳細(xì)的記錄一下。
自定義模板過(guò)濾器
理論
Django給我們提供了一個(gè)接口,可以讓我們自定義過(guò)濾器,實(shí)現(xiàn)自己的需求。
過(guò)濾器實(shí)際上就是python中的一個(gè)函數(shù),只不過(guò)是把這個(gè)函數(shù)注冊(cè)到模板庫(kù)中,以后在模板中就可以使用這個(gè)函數(shù)了,但是這個(gè)函數(shù)的參數(shù)有限制,第一個(gè)參數(shù)必須是這個(gè)過(guò)濾器需要處理的值,第二個(gè)參數(shù)可有可無(wú),如果有,那么就意味著在模板中可以傳遞參數(shù),并且過(guò)濾器的函數(shù)最多只能有兩個(gè)參數(shù)。寫(xiě)完過(guò)濾器后,需要使用django.template.Library對(duì)象將自定義過(guò)濾器進(jìn)行注冊(cè)。
實(shí)踐
- 創(chuàng)建templatetags包
我們?cè)陧?xiàng)目newwebsite2的應(yīng)用book下創(chuàng)建一個(gè)templatetags包:
- 創(chuàng)建自定義過(guò)濾器
在這個(gè)包下面創(chuàng)建一個(gè)python文件,我們命名為my_filter.py:
from django import template# 創(chuàng)建模板庫(kù)對(duì)象 register = template.Library()# 過(guò)濾器函數(shù) def mycut(value,mystr):return value.replace(mystr, "-")# 將函數(shù)注冊(cè)到模板庫(kù)中 register.filter("mycut",mycut)register.filter方法中第一個(gè)參數(shù)為自定義過(guò)濾器的名字,第二個(gè)參數(shù)為自定義過(guò)濾器所對(duì)應(yīng)的函數(shù)。
- 安裝app
打開(kāi)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', ]- 創(chuàng)建模板文件
如果想在模板中使用這個(gè)自定義過(guò)濾器,就要在模板中l(wèi)oad一下這個(gè)過(guò)濾器所在的模塊的名字(也就是這個(gè)python文件的名字)。
在templates文件夾中,創(chuàng)建模板文件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>- 發(fā)起請(qǐng)求
我們向http://127.0.0.1:8000/my_cut/發(fā)起請(qǐng)求:
Very Well !
總結(jié)
以上是生活随笔為你收集整理的Django从理论到实战(part21)--自定义模板过滤器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        