首页 文章

Django自定义404页面无效

提问于
浏览
5

所以,在我的项目中,我想添加一个自定义的404错误页面,所以我按照我在网上找到的内容,但似乎没有什么对我有用 .

这就是我的文件:

settings.py

import os
# Django settings for HogwartsMail project.

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

DEBUG = False
TEMPLATE_DEBUG = DEBUG

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ["*"]

urls.py

urlpatterns = patterns('',
    ...
)

handler404 = "HogwartsMail.views.error404"

views.py

def error404(request):
    return render(request,'404.html')

每当我尝试输入一个随机网址时,我得到的服务器错误(500)并没有得到404错误 .

正如我所说,我尝试了许多不同的方式,但没有一个真正适合我 .

另外,我遇到的另一个问题是我加载的页面非常慢,并且它们没有打开样式或图像,所以我认为,当 DEBUG = False 时,我需要一切都已经在线 . 那是对的吗?

5 回答

  • 3

    在项目文件夹的urls.py中添加此帐户(它可以是任何应用程序)是同一项目的应用程序:

    project/urls.py

    handler404 = 'accounts.views.page_not_found'
    

    在帐户视图中添加以下内容:

    accounts/views.py

    def page_not_found(request):
    
    """
    Page not found Error 404
    """
    
         response = render_to_response('404.html',context_instance=RequestContext(request))
         response.status_code = 404
         return response
    

    不要忘记进行必要的进口 . 另外,在测试分段时,不要忘记在settings.py中更改Debug = False .

  • 0

    DEBUG = False 时,您可以使用 python manage.py runserver --insecure 在本地开发期间提供静态文件 .

    请参阅this answer中的更多信息 .

  • 0
    def error404(request):
        return HttpResponseNotFound(render_to_string('404.html'))
    

    另一个例子:

    def error404(request):
        return render(request,'404.html', status=404)
    
  • 4

    好吧,事实证明我没有't seem to need to do anything but create a 404.html page. By creating in, when an 1304899 error is raised, Django will first look for a 404.html in your templates, before using it'自己的错误页面 . 我仍然有一个问题,我的静态文件不在网络上 - 当设置 DEBUG = False 既没有css文件也没有出现我的任何图像 . 除此之外,我的问题是固定的 .

  • 0

    作为a best practice我在我的项目中添加了2 urls.py . 所以我在我的基地 urls.py 中添加 handler404 . 我的父母 urls.py 看起来像这样

    from django.conf.urls import handler404
    import myapp
    
    urlpatterns = [
       path('', include('myapp.urls')),
       path('admin/', admin.site.urls),
    ]
    
    handler404 = myapp.views.error_404
    

    error_404 是我的 views.py 中的一个视图 . 像这样

    def error_404(request, exception):
        data = {"name": "somthing error"}
        return render(request,'myapp/404.html', data)
    

    查看完整的教程here

相关问题