分析直至另乙個模板標籤
模板標籤可以像包含其它標籤的塊一樣工作(想想 、 等)。 要建立乙個這樣的模板標籤,在你的編譯函式中使用 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...