Пользовательские обработчики ошибок Django в Apache и mod_wsgi

У меня есть пользовательские обработчики ошибок 404 и 500, настроенные в django, и они работают в разработке, но с Apache они просто показывают страницу внутренней ошибки сервера apache по умолчанию, даже для ошибок 404.

Вот мой urls.py:

handler400 = 'views.error400'
handler403 = 'views.error403'
handler404 = 'views.error404'
handler500 = 'views.error500'

Я читал о многих способах настройки пользовательских страниц ошибок в apache, но все подходы, которые я пробовал с django, не работали. Как правильно настроить это для Apache/mod_wsgi и Django?

Мне удалить эти строки из моего urls.py и добавить несколько строк в мой apache.conf?

Какие строки следует добавить в apache.conf, поскольку я не уверен, как получить доступ к представлениям из файла конфигурации apache, а обычная маршрутизация urls.py для Django не работает для пользовательских страниц ошибок, поскольку, как я подозреваю, Apache перехватывает запросы и предоставление собственных страниц.

Я просто хочу использовать свои шаблоны для своих пользовательских страниц ошибок (включая наследование от базового шаблона).

Как я могу этого добиться, я нигде не могу найти достойного ответа?

Спасибо

РЕДАКТИРОВАТЬ:

Я попытался отредактировать конфигурацию Apache, чтобы добавить ErrorDocument 500 /templates/500.html и тому подобное, но это не сработало.

В настоящее время у меня есть страница с ошибкой в ​​моем каталоге шаблонов, каждый из них наследуется от базового шаблона. Кроме того, у каждого из них есть собственное представление для обработки ответов.

Но независимо от того, что я делаю, удаляю эти строки из urls.py, добавляю что-то в конфигурацию apache и т. д., я не могу получить ничего, кроме типичной страницы apache Internal Server Error для отображения при любой ошибке, даже если она не 500 ошибки.

Что я могу сделать, чтобы заставить это работать? Работал нормально на сервере разработки django, но как только apache был добавлен в микс, я не могу заставить его работать ни с apache, ни с django, я должен что-то упустить, но что?


person shenk    schedule 05.11.2015    source источник


Ответы (1)


Вы можете удалить эти строки из urls.py. Django будет искать ваши шаблоны, чтобы получить их.

Просто поместите файлы 404.html и 500.html в каталог your_app/templates/.

person maciek    schedule 05.11.2015
comment
У меня есть эти файлы в моем каталоге шаблонов. Если я удалю эти строки из моего urls.py, что мне добавить в конфигурацию Apache, чтобы они заработали? - person shenk; 05.11.2015
comment
Итак, добавьте что-то вроде ErrorDocument 404 /templates/404.html? И то же самое для 500.html и даже 403.html - person shenk; 05.11.2015
comment
Маршрутизатор Django позаботится об этом, вам не нужно менять конфигурацию Apache. - person maciek; 05.11.2015
comment
Но если я удалю эти строки из urls.py, как об этом позаботится маршрутизатор Django? Я только что попробовал и все еще получаю страницы Apache по умолчанию. Я немного смущен тем, как Django может справиться с этим, когда я просто удалил эти строки из urls.py. Кажется, что Apache должен справиться с этим, поскольку он дает мне страницы ошибок по умолчанию. Я что-то упустил здесь? - person shenk; 05.11.2015
comment
У вас установлен параметр TEMPLATE_DIRS? У вас должны быть эти шаблоны в этом каталоге. - person maciek; 05.11.2015
comment
Да, они есть в этом каталоге. Шаблоны находятся в правильном месте, но без этих строк в urls.py представления никогда не вызываются. И со строками страницы ошибок apache, кажется, получают приоритет. Поэтому я не понимаю, как удаление этих строк в urls.py заставит работать пользовательские страницы без каких-либо изменений в apache.conf. Поскольку ничто не говорит серверу использовать эти шаблоны при обнаружении ошибки 404/500. - person shenk; 05.11.2015
comment
Пробовал следовать вашим инструкциям, ничего не изменилось. Я считаю, что мне нужно изменить мой apache.conf на то, что я указал несколько комментариев назад... ErrorDocument 404 /templates/404.html Единственное, что меня смущает, это то, что эти шаблоны ошибок наследуются от базового шаблона, и если я вызову их из Apache, он правильно отобразит шаблон. а наследство? - person shenk; 05.11.2015
comment
Я попытался отредактировать конфигурацию apache, и там тоже не повезло. Прямо сейчас у меня есть представление обработчика для 400, 403, 404 и 500. У каждого есть свой собственный шаблон в папке templates/. В urls.py у меня все еще есть строки handler404 = 'views.error404', я пытался их удалить, но ничего не изменилось. С ними или без них я не могу получить ничего, кроме типичной страницы Apache Internal Server Error. - person shenk; 05.11.2015
comment
Я предлагаю вам установить DEBUG = True на секунду и проверить, исходят ли ошибки из конфигурации Django или Apache. - person maciek; 05.11.2015
comment
Ладно, мне сейчас кажется, что Apache перехватывает ошибки до того, как они попадут в Django. - person shenk; 06.11.2015