Django: Должны ли пользовательские шаблоны простых тегов вызывать исключения или молчаливо проваливаться?
Я пытался найти ответ на этот вопрос из официальных документов, но все, что я мог найти, это:
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 ответа
Я думаю, что ответ заключается в том, что "это зависит от того, что подходит для вашего приложения". Если вам нужно или вы хотите защитить код, создайте исключение. Если есть веская деловая причина для создания исключения, потому что что-то не будет отображаться, например, цена или что-то еще, то вызовите исключение или, по крайней мере, предупреждение.
В противном случае, просто дайте ему ничего не делать и будьте счастливы, что вы не смотрите на трассировку стека.NET MVC:)
Шаблонные теги всегда должны вызывать исключение, если они не могут выдавать корректный вывод. Хотя вы можете вызвать собственное исключение, убедитесь, что оно распространяется TemplateSyntaxError
- это гарантирует, что исключение будет немедленно перехвачено анализатором шаблона; у вас будет доступ ко всем необходимым входам, чтобы углубиться в проблему.