我试图从官方文档中找到这个问题的答案,但我能找到的只有:
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?
如果您的答案是提出异常,是TemplateSyntaxError
还是其他例外?
答案 0 :(得分:2)
我认为答案是“这取决于适合您应用的内容”。如果您需要或想要进行防御性编码,请提出异常。如果有一个有效的商业理由提出异常,因为某些东西不会显示,比如价格或其他东西,那么提出异常,或者至少是警告。
否则,只是让它什么都不做,并且很高兴你没有看到.NET MVC堆栈跟踪:)
答案 1 :(得分:1)
如果模板标签无法生成有效输出,则应始终引发异常。虽然您可以引发自定义异常,但请确保它扩展TemplateSyntaxError
- 这可以确保模板解析器立即捕获异常;您可以访问所有必要的输入来深入研究问题。