我试图从官方文档中找到这个问题的答案,但我所能找到的是:
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
——这确保异常立即被模板解析器捕获;您将可以访问所有必要的输入以深入研究问题。