【问题标题】:Django: Should custom template simple tags raise exception or fail silently?Django:自定义模板简单标签应该引发异常还是静默失败?
【发布时间】:2012-01-16 07:44:05
【问题描述】:

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

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

【问题讨论】:

    标签: django django-templates django-custom-tags


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我同意“这取决于您的应用适合什么”。谢谢。
      猜你喜欢
      • 2011-09-21
      • 2020-07-14
      • 2013-02-06
      • 1970-01-01
      • 2021-07-13
      • 2015-01-20
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多