我写了一个自定义标签以在Django模板中使用:
{% my_custom_tag %}
。
使用Django频道,它扩展了一些页面功能。但是我担心用户可能会无意间将此标签两次插入模板中,这会造成一些问题,因为渠道会将相同的信息发送两次,等等。
有没有一种相对简单的方法来检查该标签仅在模板中使用一次,否则引发错误?
答案 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(..)
,则这些通常会具有单独的上下文,但这可能是需要的。
请注意,错误是在运行时引发的。因此,我们不会主动检测发生这种情况的模板,但是如果发生这种情况,我们会得到一个错误。