检查标签是否只在模板中使用一次

check that tag is used in template only once

我写了一个自定义标签以在 Django 模板中使用: {% my_custom_tag %}

它使用 django 通道扩展了一些页面功能。但我担心用户可能会不小心将此标签插入到模板中两次,这会产生一些问题,因为频道会传递相同的信息两次等等。

是否有任何相对简单的方法来检查标签是否只在模板中使用一次,否则会引发错误?

您可以操纵上下文,并将某个键(最好是其他应用程序未使用的键)设置为 True,否则会引发异常。例如:

@register.simple_tag(<b>takes_context=True</b>)
def my_custom_tag(<b>context</b>):
    if <b>'__some_weird_name__for_my_custom_tag' in context</b>:
        raise Exception('my_custom_tag is already used')
    context['__some_weird_name__for_my_custom_tag'] = True
    # ...
    # do other logic
    pass

当然前提是你一开始不把这个名字的内容传递给context

此外,如果您要在一个视图中执行多个 render(..),这些通常会有一个单独的上下文,但这可能是需要的。

请注意,错误是在 运行时 时引发的。因此,我们不会主动检测发生这种情况的模板,但如果发生这种情况,我们会收到错误消息。