gpt4 book ai didi

django - 如何在 django 中故意返回 404 页面

转载 作者:行者123 更新时间:2023-12-03 23:29:19 30 4
gpt4 key购买 nike

我在 django 中制作了自定义 404 页面。我正在尝试故意获取 404 错误页面。

我的项目/urls.py:

from website.views import customhandler404, customhandler500, test

urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^test/$', test, name='test'),
]
handler404 = customhandler404
handler500 = customhandler500

网站/views.py
def customhandler404(request):
response = render(request, '404.html',)
response.status_code = 404
return response


def customhandler500(request):
response = render(request, '500.html',)
response.status_code = 500
return response

def test(request):
raise Http404('hello')

但是当我去 127.0.0.1:8000/test/时,它似乎返回 500.html
终端说:
[24/Mar/2018 22:32:17] "GET /test/ HTTP/1.1" 500 128
我怎样才能故意获得404页面?

最佳答案

当您将 debug 设置为 False 时,您没有自定义处理程序,并且响应的状态代码为 404,使用基本模板目录中的 404.html(如果存在)。要返回 404 状态的响应,您可以简单地返回 django.http.HttpResponseNotFound 的实例。 .你得到 500 的原因是你提出了一个错误而不是返回一个响应。因此,您的测试功能可以简单地修改为此

from django.http import HttpResponseNotFound
def test(request):
return HttpResponseNotFound("hello")

更新:

事实证明,您收到 500 错误的原因不是您引发了异常,而是您的函数签名不正确。当我半年前回答这个问题时,我忘记了 django 会为你捕获 HTTP404 异常。但是,处理程序 View 具有与普通 View 不同的签名。 404 的默认处理程序是 defaults.page_not_found(request, exception, template_name='404.html') ,它需要 3 个参数。所以你的自定义处理程序实际上应该是
def customhandler404(request, exception, template_name='404.html'):
response = render(request, template_name)
response.status_code = 404
return response

尽管在这种情况下,您也可以只使用默认处理程序。

关于django - 如何在 django 中故意返回 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49465281/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com