【问题标题】:Url for 404 page in DjangoDjango中404页面的网址
【发布时间】:2015-04-28 18:00:42
【问题描述】:

如果我提供了错误的 url,那么我想重定向到 404.html 页面。在我的 view.py 中,我有以下功能-

from django.shortcuts import render_to_response
from django.template import RequestContext, loader
from django.core.urlresolvers import reverse
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from misc.models import *
from meta.views import Meta
from login.helper import *
from django.contrib import messages

def my_custom_404_view(request):
return render(request, "404.html", {
"areas": Area.objects.all(),
"jobs": Jobs.objects.filter(active=True),
})

我的模板中有 404 html 页面,在我的 url 文件中有以下内容

handler404 = 'pages.views.my_custom_404_view'

但是当我输入任何错误的网址时它不起作用。它给了我- 找不到页面 (404) 请求方法:GET 请求网址:http://127.0.0.1:8000/ko 我在做什么错?请提出建议。

【问题讨论】:

    标签: python django http-status-code-404


    【解决方案1】:

    那是因为您处于DEBUG 模式。在您的设置中将DEBUG 设置为False,看看它是否有效。

    编辑: 根据这个link,你还得多走几步:

    第 1 步:创建一个包含错误消息的 404.html 文件。

    第二步:将404.html放到TEMPLATE_DIRS指向的目录中

    第 3 步:在urls.py 中设置handler404 = 'app.views.custom_404'。这将是一个自定义视图,当发生 Http 404 错误时将返回 404.html 页面。

    第 4 步:在 views.py 中创建自定义视图:

    def custom_404(request):
        return render_to_response('404.html')
    

    第 5 步:在settings.pyALLOWED_HOSTS = ['hostname'] 中,这将是您运行 django 项目的 IP 地址(可以是localhost)。

    第6步:非常重要,在settings.py中,输入DEBUG=False,这样你才能看到自定义的错误页面。

    【讨论】:

    • 如果我将 DEBUG 设置为 False,那么它给了我错误的请求
    • 我已经完成了所有这些事情,我得到:错误请求 (400)
    • 尝试将 ALLOWED_HOSTS 更改为 ['*']
    • 有几个人面临同样的问题:gist.github.com/eezis/7586964
    【解决方案2】:

    没有必要像往常那样以 reg 表达式的方式指定 404 的 url,只需按照下面给出的内容进行操作即可。 首先,您需要在模板文件夹(settings.py 中指定的模板目录)中有一个 404 消息模板。 在项目文件夹的 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
    

    不要忘记进行必要的导入。也不要忘记在 staging 测试时更改 settings.py 中的 Debug=False。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2019-11-15
      • 2022-01-10
      • 2021-08-22
      • 2014-11-01
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多