1

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

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

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

4

1 回答 1

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(..)在一个视图中执行多个 s,这些通常会有一个单独的上下文,但这可能是需要的。

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

于 2018-08-10T12:57:40.110 回答