Django не может загрузить 400.html - PullRequest
0 голосов
/ 30 августа 2018

Я определил пользовательские шаблоны для ошибок 400 и 404 для моего проекта Django. Когда я пытаюсь получить доступ к производственной версии моего сайта, шаблон ошибки 404 правильно загружается для отсутствующих страниц. Однако, если я отправляю неверный запрос на мой сервер Apache / Django (например, http://mysite.example.com/%), шаблон для ошибки 400 не загружается, вместо этого отображается обычная страница ошибок Apache:

Bad Request

Your browser sent a request that this server could not understand.
Apache/2.4.18 (Ubuntu) Server at mysite.example.com Port 80

Apache вообще передает этот запрос Django, или мне нужно определить handler400 в моем проекте Django, чтобы это работало (хотя мне не нужно было делать это для 404.html)?

1 Ответ

0 голосов
/ 30 августа 2018

Важным моментом здесь является то, что ваш apache действует как прокси для вашего usgi-сервера. Он пересылает все действительные запросы в usgi, запрос на несуществующий запрос является действительным запросом в отношении apache и требует переадресации на маршрутизатор django, который обнаружит, что отображение URL не существует, и выдаст ошибку 404. Эта ошибка выполняется внутренне django и приводит к отображению страницы django 404.

Некоторые запросы, в частности, инфраструктура отдыха django, выдает 400 ответов внутренне, когда сериализаторам не удается проверить входящий запрос json. Это также приведет к отображению страницы django 400.

Однако если сам запрос искажен, он никогда не будет перенаправлен на сервер usgi, и django никогда его не увидит. он будет обработан внутри Apache, поэтому отображается HTML-код Apache 400.

Самым простым решением было бы заменить все страницы с ошибками apache на соответствующие страницы django (если это шаблоны, визуализируйте их и сохраните html)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...