2013-06-29 73 views
4

在我的意見我有代碼:Django的渲染模板`500.html`,而不是`404.html`

raise Http404 

DEBUG=False Django的渲染模板500.html而不是正確404.html!我無法理解爲什麼!

編輯:當DEBUG=True我得到了一個標準(由Django的)

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=Falseraise Http404聲明永遠不會達成。怎麼可能?

更新

DEBUG=False

其實在每一個網址,我收到了500雖然與DEBUG=True這種情況不會發生。它怎麼可能?它應該運行相同。我開始認爲這是一個Django錯誤。

+3

一種存在的可能是因爲你的400.html模板生成一個500錯誤,你可以發表你的模板? – maazza

+0

DEBUG = True會發生什麼? –

+0

@maazza:我懷疑它。我創建了一個新的404.html,並在404中寫入了它。但是,它沒有被渲染。 – rubik

回答

4

您的debug = false錯誤可能是由於allowed_hosts設置造成的。

看到:Setting DEBUG = False causes 500 Error

這是在Django新生產

需要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