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

时间:2011-12-08 22:03:13

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

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

  

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还是其他例外?

2 个答案:

答案 0 :(得分:2)

我认为答案是“这取决于适合您应用的内容”。如果您需要或想要进行防御性编码,请提出异常。如果有一个有效的商业理由提出异常,因为某些东西不会显示,比如价格或其他东西,那么提出异常,或者至少是警告。

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

答案 1 :(得分:1)

如果模板标签无法生成有效输出,则应始终引发异常。虽然您可以引发自定义异常,但请确保它扩展TemplateSyntaxError - 这可以确保模板解析器立即捕获异常;您可以访问所有必要的输入来深入研究问题。

相关问题