2013-06-29 4 views
4

В одном из моих взглядов у меня есть код:Django предоставляет шаблон `500.html` вместо` 404.html`

raise Http404 

Когда DEBUG=False Django предоставляет шаблон 500.html вместо правильного 404.html! Я не понимаю, почему!

EDIT: Когда я DEBUG=True получить стандартный один (Джанго)

Page not Found (404) 
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page. 

Более того, что в консоли runserver я вижу ясно 404 код. Вместо этого, при установке DEBUG=False в консоли я получаю 500 !! Это так странно.

РЕДАКТИРОВАТЬ 2: Если я разместил заявление на печать перед поднятием Http404 Я вижу сообщение, когда DEBUG=True, но не тогда, когда оно False!

РЕДАКТИРОВАТЬ 3: Я могу подтвердить, что когда DEBUG=False заявление raise Http404 так и не было достигнуто. Как это возможно?

Update

На самом деле с DEBUG=False на каждом URL я получаю 500. В то время как с DEBUG=True этого не происходит. Как это возможно? Он должен работать одинаково. Я начинаю думать, что это ошибка Django.

+3

Один Raison может быть потому, что ваш шаблон 400.html генерирует ошибку 500, вы можете разместить свой шаблон? – maazza

+0

И что происходит с DEBUG = True? –

+0

@maazza: Я сомневаюсь. Я создал новый 404.html и написал в нем всего 404. Тем не менее, он не получился. – rubik

ответ

4

Ваша ошибка с debug = false может быть вызвана установкой allowed_hosts.

см: Setting DEBUG = False causes 500 Error

Это новое в Джанго 1.5

allowed_hosts требуется в производстве

Новая настройка allowed_hosts проверяет заголовок хоста по просьбе и защищает от хозяина отравлений атак. Этот параметр теперь требуется всякий раз, когда DEBUG является False, иначе django.http.HttpRequest.get_host() поднимет SuspiciousOperation. Для получения дополнительной информации см. Полную документацию для новой настройки .

https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production

Смежные вопросы