#django #exception #django-templates
#django #исключение #django-templates
Вопрос:
У Django есть (обычно прекрасное) поведение превращения исключений в шаблонах в пустые строки. Поэтому, если я это сделаю {{object.fn_which_throws_exception}}
, я просто получу пустую строку. Но иногда я хотел бы узнать что-нибудь об исключении: есть ли какой-либо способ заставить django присутствовать или регистрировать детали таких исключений?
Ответ №1:
Если вы используете runserver
, вы могли бы использовать pdb для пошагового выполнения кода.
Добавьте import pdb; pdb.set_trace()
выше проблемный код. Перейдите по соответствующему URL в вашем браузере, и pdb должен приостановить выполнение и позволить вам пошагово просмотреть код построчно.
Ответ №2:
Если вы работаете в своей среде разработки, убедитесь, что для DEBUG
и TEMPLATE_DEBUG
установлено значение True
.
Если вы работаете в производственной среде, лучше всего добавить django-sentry в свой проект. Он отслеживает всю информацию, с которой вы могли бы работать DEBUG=True
. Это абсолютно потрясающая программа, которая сэкономит вам бесконечное количество времени, когда что-то пойдет не так.
РЕДАКТИРОВАТЬ: О, и последнее. Вы всегда можете обернуть свой код в try... except
блок и вернуть исключение таким образом:
def fn_which_throws_exception():
import sys
try:
# code that might raise exception
except:
return sys.exc_info()
Комментарии:
1. У меня для DEBUG и TEMPLATE_DEBUG установлено значение True (по умолчанию) — вы предполагаете, что это должно где-то предоставлять мне информацию об исключении?
2. Да, если возникло какое-либо исключение, и для обоих из них установлено значение true, вы должны получить страницу ошибки с обратной трассировкой.
3. Согласно документам django, TEMPLATE_DEBUG сообщает об исключениях TemplateSyntaxError, в отличие от исключений из функций, которые я вызываю из шаблона. По моим наблюдениям, он ничего не делает с исключениями в функциях, которые я вызываю из шаблона, вы действительно пробовали это?
4. Правильно, TEMPLATE_DEBUG просто охватывает исключения, встречающиеся при обработке тегов шаблона и тому подобное. Но DEBUG охватывает все остальное. Если у вас есть исключение, любое исключение, которое не обработано в вашем коде, оно должно сгенерировать страницу ошибки в режиме отладки.
5.code.djangoproject.com/ticket/6907 code.djangoproject.com/ticket/8031