首先注冊方法一般都是先執行個體化一個template.Library。如:
from django import template
register = template.Library()
1.注冊自定義過濾器方法
register.filter('A',b)
filter()方法中的2個參數分别:A過濾器的名稱(一個字串)和 b過濾器函數本身。
2.注冊自定義模闆标簽方法
register.tag('A',b)
tag()方法需要2個參數:模闆标簽的名字A和編譯的函數b。
3.注冊簡單标簽的方法如:if ,for ,ifequal等等
register.simple_tag(A)
該輔助函數傳遞的函數隻有(單個)參數,參數兩邊的引号(如果有的話)已被截掉了是以隻可能接收到一個普通的Unicode字元串。
4.注冊包含标簽的方法
register.inclusion_tag('A.html')(B)
inclusion_tag()方法需要2個參數:模闆所在的檔案A和編譯的函數B。
有時候,包含标簽需要通路父模闆的context.此時可用到takes_context選項,即設定takes_context=True,并且該标簽不需要參數,且下面的Python函數會帶一個參數:就是當這個标簽被調用時的模闆context.
@register.inclusion_tag('A.html',takes_context=True)
def jump_link(context):#此處參數必須是context
return {
'link':context['home_link'],
'title':context['home_title'],
#此處有包含指向首頁的變量,即取home_link和home_title中的變量link和title的值
}
然後建立A.html,裡面可能包含下面内容:
XXXXX<a href="{{ link }}">{{ title }}</a>xxxxxx 該處的link和title分别取自home_link和home_title中的内容。
如果要調用該參數,可以直接加載它的庫,然後不帶參數地調用它{{ jump_link }}
5.編寫自定義模闆加載器
load_template_source(template_name,template_dirs=None)
template_name是加載模闆的名稱,類似于loader.get_template()或者loader.select_template()
template_dirs是一個可選的代替TEMPLATE_DIRS的搜尋目錄清單
如果加載器能夠成功的加載一個模闆,此時會傳回一個元組(template_source,template_path),template_source:模闆引擎編譯的模闆字元串、template_path:被加載的模闆路徑。若加載器加載模闆失敗,那麼會觸發django.template.TemplateDoesNotExist異常。
注:在上面代碼中看到@xxxx,這樣的寫法,改文法在python 2.4及以上版本中成立,即:
@register.tag(name="A") #A過濾器的名稱(一個字串)
def B(parser.token):
#.....
或者直接寫成:
@register.tag
def B(parser,token):
#......
Django此處會使用函數名稱B來作為标簽名稱