2014-02-07 66 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视图将永远不会被使用,并且回溯将改为显示,一些调试信息。