Django:自定义模板简单标签应该引发异常还是静默失败?
Posted
技术标签:
【中文标题】Django:自定义模板简单标签应该引发异常还是静默失败?【英文标题】:Django: Should custom template simple tags raise exception or fail silently? 【发布时间】: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
还是其他异常?
【问题讨论】:
【参考方案1】:如果模板标签不能产生有效的输出,它们应该总是引发异常。虽然您可以引发自定义异常,但请确保它扩展了TemplateSyntaxError
——这可以确保模板解析器立即捕获该异常;您将可以访问所有必要的输入来深入研究问题。
【讨论】:
【参考方案2】:我认为答案是“这取决于您的应用适合什么”。如果您需要或想要进行防御性编码,请引发异常。如果有正当的商业理由因为某些内容无法显示(例如价格或其他内容)而引发异常,则引发异常,或者至少是警告。
否则,让它什么都不做,并且很高兴您没有查看 .NET MVC 堆栈跟踪 :)
【讨论】:
我同意“这取决于您的应用适合什么”。谢谢。以上是关于Django:自定义模板简单标签应该引发异常还是静默失败?的主要内容,如果未能解决你的问题,请参考以下文章
JQuery 在 Django 自定义模板标签的模板中不起作用