Django:自定义模板简单标签是否会引发异常或静默失败?



我试图从官方文档中找到这个问题的答案,但我所能找到的是:

render()永远不会引发TemplateSyntaxError或任何其他错误例外。它应该静默失败,就像模板过滤器应该

但是上面并没有真正回答这个问题,也许,让我更困惑,因为它适用于常规的自定义标签,我关心的是简单标签

下面是一个例子(和问题本身):

@register.simple_tag
def foo(formfield):
    if isinstance(formfield, forms.ChoiceField):
      # do something
    else:
      # This function doesn't deal with non-ChoiceField. 
      # Should it raise exception or fail silently?

如果你的答案是raise exception,是TemplateSyntaxError还是其他异常?

我认为答案是"这取决于什么适合你的应用"。如果需要或想要进行防御性编码,则引发异常。如果有一个合理的商业理由引发异常,因为某些东西不会被显示,比如价格或其他东西,那么引发异常,或者至少是一个警告。

否则,就让它什么都不做,并高兴你没有看到一个。net MVC堆栈跟踪:)

如果模板标签不能产生有效的输出,应该总是引发异常。虽然您可以引发自定义异常,但请确保它扩展了TemplateSyntaxError——这确保异常立即被模板解析器捕获;您将可以访问所有必要的输入以深入研究问题。

最新更新