【问题标题】:raise 404 instead of 500 in urls.py django在 urls.py django 中提高 404 而不是 500
【发布时间】:2011-12-02 20:17:00
【问题描述】:

我有一个由 django 提供支持的网站。很少有我没有捕捉到的 url 模式 说 www.mysite.com/12233445 www.mysite.com/@##$$$ www.mysite.com/alphabetagamma 这会导致 500 错误页面,我希望所有此类非标准 url 重定向到 404 错误页面。任何线索是最好的方法吗?

【问题讨论】:

  • 通常如果 URL 不匹配,您将获得 404 页面。您必须有一个匹配的 URL - 请发布您的 urls.py。

标签: django django-urls


【解决方案1】:

通过使用自定义 handler500¶,您可以将响应状态代码从 500 更改为 404。让您的项目返回此帖子可能会帮助您了解如何操作 - http://ilian.i-n-i.org/custom-404-not-found-page-with-django-cms/

但正如@Daniel 所说,为未找到的页面获得 500 分是不正常的。开启调试模式,看看是什么错误导致了 500。

【讨论】:

    【解决方案2】:

    您是否创建了404.html 模板?当您的settings.py 中有DEBUG = False,但尚未创建404.html 模板时,就会发生这种情况。这会引发 TemplateDoesNotExist 异常,因此会出现错误 500 响应。

    【讨论】:

      【解决方案3】:

      转到您的视图,在 try except 块中执行所有获取/过滤操作。

      try:
      
      variable = object.get(some checks here)
      
      except: object.DoesNotExist
       raise Http404
      
      return (whatever)
      

      【讨论】:

      • 通常如果 URL 完全不正确,您根本不应该点击视图。示例 - 如果 example.com/nothing 上没有任何内容,则应直接引发 404。如果您正在检查部分 url,则应使用上面的示例。示例 example.com/news/news-exist 正在工作(您查看尝试在数据库中查找“news-exist”) example.com/news/news-does-not-exist 应该在未找到新闻后引发 404数据库。这就是为什么你有 get_object_or_404 方法
      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 2018-12-27
      • 2013-06-27
      • 2011-07-07
      • 2015-05-26
      • 2021-10-17
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多