很难说出问题所以生病了,我写下了以下模板标签
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的一个实例(或者我相信),isinstance会失败,我检查nodelist
并看到确实有SimpleTagNode的实例,但它们都会返回在isinstance
条件下假,我已经花了很长时间试图找出这个,但没有发现任何东西,我甚至使用了运行上面功能的shell并仍然返回了fals,任何帮助都非常值得赞赏
答案 0 :(得分:1)
所以我终于解决了它,基本上在文件顶部包含_scan_tag
函数的模块中,我正在导入SimpleTagNode
类,如此
from simple_tag.templatetags.simple_tag import SimpleTagNode
simple_tag是我的应用的名称,也是模板文件的名称,由于某种原因这与isinstance
有冲突,所以我试过
from paulo.simple_tag.templatetags.simple_tag import SimpleTagNode
paulo是我的项目应用程序,它有效。