Django,创建自定义 500/404 错误页面

新手上路,请多包涵

完全按照 此处 找到的教程,我无法创建自定义 500 或 404 错误页面。如果我确实输入了错误的 url,该页面会给我默认的错误页面。是否有任何我应该检查的内容会阻止显示自定义页面?

文件目录:

 mysite/
    mysite/
        __init__.py
        __init__.pyc
        settings.py
        settings.pyc
        urls.py
        urls.pyc
        wsgi.py
        wsgi.pyc
    polls/
        templates/
            admin/
                base_site.html
            404.html
            500.html
            polls/
                detail.html
                index.html
        __init__.py
        __init__.pyc
        admin.py
        admin.pyc
        models.py
        models.pyc
        tests.py
        urls.py
        urls.pyc
        view.py
        views.pyc
    templates/
    manage.py


mysite/settings.py 我启用了这些:

 DEBUG = False
TEMPLATE_DEBUG = DEBUG

#....

TEMPLATE_DIRS = (
    'C:/Users/Me/Django/mysite/templates',
)

mysite/polls/urls.py 内:

 from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)

我可以发布任何其他必要的代码,但是如果我使用错误的 url,我应该更改什么以获得自定义 500 错误页面?

原文由 reZach 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
1 个回答

在您的主要 views.py 添加您自己的以下两个视图的自定义实现,并使用您要显示的内容设置模板 404.html500.html

使用此解决方案,无需将自定义代码添加到 urls.py

这是代码:

 from django.shortcuts import render_to_response
from django.template import RequestContext

def handler404(request, *args, **argv):
    response = render_to_response('404.html', {},
                                  context_instance=RequestContext(request))
    response.status_code = 404
    return response

def handler500(request, *args, **argv):
    response = render_to_response('500.html', {},
                                  context_instance=RequestContext(request))
    response.status_code = 500
    return response

更新

handler404handler500 是在 django/conf/urls/__init__.py 中找到的导出的 Django 字符串配置变量。这就是上述配置有效的原因。

要使上述配置生效,您应该在 urls.py 文件中定义以下变量,并将导出的 Django 变量指向定义这些 Django 功能视图的字符串 Python 路径,如下所示:

 # project/urls.py

handler404 = 'my_app.views.handler404'
handler500 = 'my_app.views.handler500'

Django 2.0 更新

在 Django 2.0 中更改了处理程序视图的签名: https ://docs.djangoproject.com/en/2.0/ref/views/#error-views

如果您使用上述视图,handler404 将失败并显示消息:

“handler404() 得到了一个意外的关键字参数‘exception’”

在这种情况下修改你的观点是这样的:

 def handler404(request, exception, template_name="404.html"):
    response = render_to_response(template_name)
    response.status_code = 404
    return response

原文由 Aaron Lelevier 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题