2014-02-07 65 views
0

我需要重定向Django的進口錯誤'自定義錯誤page.All除了導入錯誤其他錯誤是redrecting到自定義錯誤頁的Django如何蟒蛇導入錯誤重定向到自定義錯誤頁

早在DEBUG =假在瀏覽器中顯示 錯誤是

Traceback (most recent call last): 

File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 283, in run 
    self.result = application(self.environ, self.start_response) 

File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 272, in __call__ 
    response = self.get_response(request) 

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 169, in get_response 
response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) 

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 214, in handle_uncaught_exception 
if resolver.urlconf_module is None: 

File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 274, in _get_urlconf_module 
self._urlconf_module = import_module(self.urlconf_name) 

File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 

File "/project/backup/project/hg/rel0129/hg/src/customer_/../customer_/hg/urls.py", line 4, in <module> 
from lostpassword.views import recaptcha, reset 

File "/project/backup/project/hg/rel0129/hg/../customer_/hg/lostpassword/views.py", line 12, in <module> 
from hg.utils.common import __render, __redirect 
hg/utils/common.py", line 15, in <module> 
from urllibwrapper import URLClient, ClientResponse 

ImportError: No module named urlwrapper 

錯誤必須重定向到自定義錯誤頁

在此先感謝

+1

'404'沒有找到頁面。理想情況下,你想'500'(或服務器錯誤)。你爲什麼指定一個'404'? – Ewan

+0

我的意思是自定義錯誤頁面或django默認錯誤模板。 –

+0

導入異常是編程錯誤,而不是「正確的服務器,錯誤的URL,對不起!」錯誤。 –

回答

2

Django將已經當出現導入錯誤時向您顯示錯誤頁面;顯示的錯誤頁面取決於DEBUG的值。

如果DEBUG設置爲True,則顯示回溯和一些調試信息。

如果DEBUGFalse,Django將顯示默認的500錯誤頁面。您可以通過在模板目錄的根目錄中提供500.html頁面,或者在根URLConf中提供handler500字符串來設置自定義500錯誤響應。

查看500 error view documentation

但是,項目中的導入錯誤可能會阻止Django正確配置,並且將找不到自定義500錯誤處理程序。有這樣一個'太破'的東西,早期的進口例外就是這種情況。然後,異常完全繞過Django錯誤處理,而是下降到WSGI服務器級別。

在這種情況下,提供DEBUG設置爲False,向用戶顯示的默認500錯誤消息,一個簡單的文本消息:

服務器發生了錯誤。請聯繫管理員。

注意年長 Django的發佈(之前的1.4)內置的服務器仍然可以顯示進口例外的回溯,即使調試模式是關閉的,因爲這些舊版本使用自己的簡單的HTTP服務器。

可以在這種情況下,你的Django服務器升級到1.4或更高版本,和/或不使用內置的服務器。改爲使用適當的production deployment

+0

我已經有500.html頁面,但Django的不是莫名其妙地重定向.. –

+1

@tomjoy:兩種可能性:導入錯誤,無法從Django的完成你的項目配置(所以它不不知道模板根目錄,並且不會找到'500.html'頁面,或者您將DEBUG設置爲True。 –

+2

@tomjoy:導入錯誤相當嚴重,您不能希望在* * *被破壞時將站點部署到生產環境。 –

1

爲了提高您需要定義模板,然後添加以下到您的urls.py自定義錯誤頁:

handler500 = 'mysite.views.my_custom_error_view' 

要多看(包括回溯 - 不建議,如果DEBUG = False)看看this answerDjango 500 message in custom template

更多的信息在django docs

這SERVER_ERROR觀點應該足夠的Web應用程序的99%,但如果要覆蓋的觀點,你可以在你的根URLconf中指定handler500,就像這樣:

handler500 = 'mysite.views.my_custom_error_view'

背後場景中,Django通過在您的根URLconf中查找handler500來確定500視圖,如果您沒有定義,則會回退到django.views.defaults.server_error

有一點需要注意500觀點:

如果DEBUG設置爲True(在設置模塊),那麼你的500視圖將永遠不會被使用,並且回溯將改爲顯示,一些調試信息。