如何在Django中覆盖标准handler404,handler403,handler500?

时间:2013-10-03 13:13:45

标签: python django exception-handling

我尝试过使用https://docs.djangoproject.com/en/dev/topics/http/views/教程,但我仍然获得了标准的404 html页面。我想切换到我的自定义视图

handler404 = 'myview.views.custom_page_not_found' ,

我调试了它(使用eclipse),然后将handler404(old value -'django.config.default.views.page_not_found)的值更改为我给出的新值('myview.views.custom_page_not_found')。但它仍然显示较旧的404页面。我已将settings.py DEBUG更改为False,然后显示自定义页面。但它有一些缺点(它不会加载静态文件,所有,DEBUG = false不是正确的方法)所以我不得不重置为True。

我是否必须进行其他修改才能实现此目的?

2 个答案:

答案 0 :(得分:2)

我认为您不能毫无困难地在DEBUG = True模式下更改404页面。

文档中有一个提示(https://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view):

  

如果DEBUG设置为True(在您的设置模块中),那么将永远不会使用您的404视图,而是显示您的URLconf,并显示一些调试信息。

答案 1 :(得分:0)

尝试将其添加到主urls.py:

的底部
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^404/$', TemplateResponse, {'template': '404.html'}))

将404.html交换到您使用的相应模板,我相信404.html是默认设置。然后使用debug = True,您可以测试404页面。

如果您想使用Debug = True进行测试,那么您需要在主urls.py的底部进行测试:

#Enable static for runserver with debug false
from django.conf import settings
if settings.DEBUG is False:   #if DEBUG is True it will be served automatically
    urlpatterns += patterns('',
            url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    )

使用DEBUG = False运行时,请不要忘记收集静态:

python manage.py collectstatic

希望这有帮助,干杯!