Страница ошибки Django не отображается с синтаксической ошибкой

У меня есть пользовательская страница Django 500 и отладка установлена на False. Когда мое приложение сталкивается с ошибкой во время выполнения, я получаю трассировку стека Django, как ожидалось.

Однако, когда у меня есть синтаксическая ошибка, я получаю загадочную страницу Apache "Внутренняя ошибка сервера" и должен отлаживать Django, закрывая журнал apache.

Почему Django не показывает страницу с ошибкой?

Я считаю, что я использовал страницы ошибок Django для всех ошибок, а не только для времени выполнения.

Любая помощь будет принята с благодарностью.

1 ответ

Это потому, что интерпретатор, запускающий django (запущенный apache), даже не запускается, поэтому нет способа отобразить фактическую страницу.

Что входит в журнал apache, это интерпретатор python stderr

Из документации mod_wsgi

При использовании mod_wsgi, если вы или веб-фреймворк, который вы используете, не предпринимают особых действий, чтобы перехватывать исключения и представлять детали в альтернативном режиме, единственное место, где будут записываться детали неперехваченных исключений, содержится в файлах журнала ошибок Apache. Таким образом, файлы журнала ошибок Apache являются вашим основным источником информации, когда все идет не так.

Подводя итог: SyntaxError означает, что код не является питоном, поэтому некому поймать исключение и показать его на дружественной веб-странице.

Я не знаю, как изменить это в Apache, но, по крайней мере, в моих тестах работает зеленый единорог + nginx. Я получаю stacktraces на странице 500, если я запускаю своих зеленых единорогов с помощью --debug - даже когда Django не загружается из-за SyntaxError

licensed under cc by-sa 3.0 with attribution.