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