剖析Django中模版標籤的解析與引數傳遞

2022-10-04 22:21:20 字數 1509 閱讀 5709

分析直至另乙個模板標籤

模板標籤可以像包含其它標籤的塊一樣工作(想想 、 等)。 要建立乙個這樣的模板標籤,在你的編譯函式中使用 parser.parse() 。

標準的 標籤是這樣實現的:

def do_comment(parser, token):

nodelist = parser.parse(('endcomment',))

parser.delete_first_token()

return commentnode()

class commentnode(template.node):

def render(self, context):

return ''

parser.parse() 接收乙個包含了需要分析的模板標籤名的元組作為引數。 它返回乙個django.template.nodelist例項,它是乙個包含了所有nod程式設計客棧e物件的列表,這些物件是解析器在解析到任一元組中指定的標籤之前遇到的內容.

因此在前面的例子中, nodelist 是在 和 之間所有節點的列表,不包括 和 自身。

在 parser.parse() 被呼叫之後,分析器還沒有清除 標籤,因此**需要顯式地呼叫 parser.delete_first_token() 來防止該標籤被處理兩次。

之後 commentnode.render() 只是簡單地返回乙個空字串。 在 和 之間的所有內容都被忽略。

分析直至另外乙個模板標籤並儲存內容

在前乙個例子中, do_comment() 拋棄了 和 之間的所有內容。當然也可以修改和利用下標籤之間的這些內容。

例如,這個自定義模板標籤,它會把它自己和之間的內容變成大寫:

this will appear in uppercase, }.

就像前面的例子一樣,我們將使用 parser.parse() 。這次,我們將產生的 nodelist 傳遞給 node :

def do_upper(parser, token):

nodelist = parser.parse(('endupper',))

par程式設計客棧ser.delete_first_token()

return uppernode(nodelist)

class uppernode(template.node):

def __init__(self, nodelist):

self.nodelist = nodelist

def render(self, context):

output = self.nodelist.render(context)

return output.upper()

這裡唯一的encfge乙個新概念是 uppernode.render() 中的 self.nodelist.render(context) 。它對節點列表中的每個 node 簡單的呼叫 render() 。

本文標題: 剖析django中模版標籤的解析與引數傳遞

本文位址: /jiaoben/python/128370.html

django 模版標籤筆記

一 模板變數筆記 1 在模版中使用變數,需要將變數放到 中。2 如果想訪問物件的屬性,可以通過 物件.屬性名 的方式訪問 3 如果想要訪問乙個字典的key對應的value,那麼只能通過 字典.key 4 因為在訪問字典的 key 時候也用 來訪問,因此不能在字典中定義本身就有的屬性名當做 key 否...

在Django中編寫模版節點及註冊標籤的方法

編寫模板節點 編寫自定義標籤的第二步就是定義乙個擁有 render 方法的 node 子類。繼續前面的例子,我們需要定義 currenttimenode import datetime class currenttimenode template.node def init self,format ...

django 模版系統 標籤的自定義

為了自定義乙個模版標籤,你要告訴django遇到這個標籤的時候該怎麼辦。當django編譯乙個模版時,它將原來的模版分成乙個個節點 node 每個節點都是django.template.node的乙個例項,並且具備render 方法,於是,乙個已編譯的模版就是節點物件的乙個列表,例如 hello,b...