2013-11-15 2 views
0

Я новичок в Django и работаю над учебником. Я тупо набрал немного кода, который обычно поднимал бы синтаксическую ошибку или ошибку имени, если бы я запускал файл, как стандартный скрипт. Однако, когда я пытаюсь перейти к представлению в своем веб-браузере, используя manage.py runserver, я просто получаю пустую страницу без соответствующей ошибки/трассировки. То же самое касается консоли, с которой я запускал manage.py runserver - она ​​просто показывает запрос GET. Кроме того, при запуске сервера консоль отображает «0 найденных ошибок», что было явно ложным.Django Error Reporting Simple Syntax Errors

Мой вопрос в том, как Django сообщает об ошибках и отзывах? Нужно ли мне что-нибудь активировать? (У меня есть DEBUG = True в моем файле settings.py). Мне как-то неинтересно, что я могу сделать небольшую опечатку, и вдруг весь сайт перестает работать, и мне не сообщается отчет о том, где проблема.

ответ

1

Что касается запуска сервера разработки, он скажет, что при запуске сервера обнаружено 0 ошибок. Обычно это относится к конфигурации и синтаксису в файле и моделях settings.py. Он будет сообщать только о ошибках, которые возникают через путь к коду запуска, который обычно не проходит через обработчики вашего вида.

По мере изменения файлов сервер разработки достаточно умен, чтобы перезагрузить себя. Синтаксические ошибки приведут к краху сервера разработки.

Если вы видите пустую страницу и запрос GET успешно возвращается, ваш код отлично работает с точки зрения Django. Он обрабатывает запрос и возвращает ответ, хотя вы знаете, что ответ неверен. Как правило, синтаксические ошибки здесь заставят представление возвращать 500, где вы увидите отладочную информацию, возвращаемую в представлении (если DEBUG = True), и вы увидите ее также в консоли. Казалось бы, ваша опечатка была действительной python, поскольку она успешно прошла через обработчик вида, чтобы вернуть пустую страницу. Там действительно ничего не может сделать, кроме модульных тестов, как Django, пустая страница может быть действительным ответом.

Теперь, когда вы переходите от разработки к производству, вы, вероятно, захотите узнать, когда страница попадает в ошибку. Django builds off Python's logging framework для обработки ошибок и других сообщений. По умолчанию в вашем файле settings.py настроен обработчик mail_admins, который обрабатывает ошибку на django.request. Если вы установили ADMINS и EMAIL_BACKEND в свой файл настроек, вы получите по электронной почте трассировку стека за 500 ошибок, которые происходят на вашем сервере. По мере того, как вы получаете больше возможностей, вы можете создать свой собственный журнал, отправив сообщения на фреймворк Python и пользовательские обработчики.

import logging 

logger = logging.GetLogger(__name__) #using the module name so in your settings.py you can configure different settings per module 

logger.info('msg') 
logger.error('msg') 

Я бы рекомендовал смотреть в Sentry в качестве обработчика для сообщений об ошибках, что делает удар подсчета и хранит журналы ошибок.

+0

Оказывается, это на самом деле больше проблем, чем привести. Я не получаю ошибок «желтой страницы» в Django, когда я использую хром (они просто пусты). Однако, когда я использую IE, я получаю их. Я задам новый вопрос с этими деталями. – jsexauer

+0

Новый вопрос на http://stackoverflow.com/questions/20031556/ – jsexauer

+0

Это немного неточно. Во время запуска * синтаксические ошибки * в модулях просмотра, безусловно, будут пойманы, поскольку Django должен импортировать представления, чтобы создавать сопоставления маршрутов. Однако он не поймает никаких ошибок во время выполнения * в большинстве модулей, но это другая проблема. – hayavuk