1

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

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异常还是其他异常?

4

2 回答 2

2

我认为答案是“这取决于你的应用程序适合什么”。如果您需要或想要进行防御性编码,请引发异常。如果有正当的商业理由因为某些内容无法显示(例如价格或其他内容)而引发异常,则引发异常,或者至少是警告。

否则,就让它什么都不做,并且很高兴您没有查看 .NET MVC 堆栈跟踪 :)

于 2011-12-08T22:07:39.157 回答
1

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

于 2011-12-09T07:53:38.963 回答