1
難字的問題如此虐待向右走的時候,我寫了下面的模板標籤Django的模板標籤實例
def do_simple_tag(parser, token):
try:
tag_name, name = token.split_contents()
except ValueError:
raise template.TemplateSyntaxError("%r tag requires exactly one argument" % token.contents.split()[0])
if not (name[0] == name[-1] and name[0] in ('"', "'")):
raise template.TemplateSyntaxError("%r tag's argument should be in quotes" % tag_name)
return SimpleTagNode(name[1:-1])
class SimpleTagNode(template.Node):
def __init__(self, name):
self.name = name
def render(self, context):
content = get_content(context, request, name)
return content
register.tag('simple_tag', do_simple_tag)
然後我寫了掃描模板中的這個標籤,並得到所有實例的功能此標記表示內模板列表中,像這樣
def get_tags(template):
compiled_template = get_template(template)
simple_tag_instances = _scan_tag(compiled_template.nodelist)
def _scan_tag(nodelist, current_block=None, ignore_blocks=[]):
tags = []
for node in nodelist:
if isinstance(node, SimpleTagNode):
tags.append(node.get_name())
所以,我的問題是爲什麼,如果節點是SimpleTagNode的INFACT實例(或因此我認爲)請問isinstance失敗,我檢查nodelist
,發現確實有SimpleTagNode的實例,但他們會a在isinstance
條件下返回false,我花了很長時間試圖找出這一個,但沒有發現任何東西,我甚至使用殼運行上面的功能,仍然返回的錯誤,任何幫助是非常讚賞
首先,你確定在Django的上下文中,節點是你認爲它的實例嗎?嘗試添加'import pdb; pdb.set_trace()'在迭代nodelist之前。調試外殼將在Django dev服務器中打開,您將可以執行類型(節點)。 –
我照你說的做了,並嘗試了isinstance(nodelist [2],SimpleTagNode),並且它返回了true,但是當我讓它正常運行時它返回False – Paulo