检查标签仅在模板中使用一次

时间:2018-08-10 12:41:46

标签: django django-templates django-filter django-tagging

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

使用Django频道,它扩展了一些页面功能。但是我担心用户可能会无意间将此标签两次插入模板中,这会造成一些问题,因为渠道会将相同的信息发送两次,等等。

有没有一种相对简单的方法来检查该标签仅在模板中使用一次,否则引发错误?

1 个答案:

答案 0 :(得分:1)

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

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

当然,条件是您最初不会将此名称的内容传递给上下文。

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

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