Django解析直到另一个块标记

时间:2017-01-20 13:00:24

标签: django django-templates

我从一本自定义模板标签中有这个例子的书中学习django,其中{%upper%}和{%endupper%}内的所有内容都变为.upper():

books_extras.py

declare module "Foo" {...}

当我使用def do_upper(parser, token): nodelist = parser.parse(('endupper',)) parser.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() {% upper %}包装文字时,我收到此错误:

{% endupper %}

有没有另外一个例子,像这样的评论是有效的,我没有必要注册它:

django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 116: 'upper'. Did you forget to register or load this tag?

那么,为什么我会收到此错误?

1 个答案:

答案 0 :(得分:2)

正如错误消息所示,您忘记了register the tag

def do_upper(parser, token):
    ...
    return UpperNode(nodelist)
register.tag('upper', do_upper)

# alternative decorator syntax
@register.tag(name='upper')
def do_upper(parser, token):
    ...

或者您忘记将其加载到模板中

{% load book_extras %}
{% upper %}
text
{% endupper %}