如果在 django 的 urls.py 中找不到,则将任何 url 重定向到 404.html

Posted

技术标签:

【中文标题】如果在 django 的 urls.py 中找不到,则将任何 url 重定向到 404.html【英文标题】:Redirect any urls to 404.html if not found in urls.py in django 【发布时间】:2015-07-25 13:36:20 【问题描述】:

如果 urls.py 中不存在任何类型的 url 模式而不是被 django 显示错误,我如何将任何类型的 url 模式重定向到创建的页面“404.html”页面。

【问题讨论】:

停用DEBUG。这样就可以了。 【参考方案1】:

无需更改您的viewurl 中的任何内容。 只需执行这 2 个步骤,在您的 settings.py 中执行以下操作

DEBUG = False
ALLOWED_HOSTS = ["*"]

在您的应用目录(本例中为 myapp)中,创建myapp/templates/404.html,其中404.html 是您的自定义错误页面。就是这样。

【讨论】:

永远不要在生产中使用 ALLOWED_HOSTS = ["*"]【参考方案2】:

转到您的项目settings.py 并将DEBUG = True 设置为DEBUG = False 然后 Django 将所有未设置的模式重定向为未找到。

另外如果你想自定义404模板,在你的项目urls.py

设置

handler404 = 'app.views.404_view'

然后在你的项目中view.py

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

def handler404(request):
    response = render_to_response('404.html', ,
                                  context_instance=RequestContext(request))
    response.status_code = 404
    return response

最后,在您的 templates 添加 404.html 并填写您想要向最终用户展示的内容。

【讨论】:

【参考方案3】:

在您的views.py 中,只需添加以下代码(无需更改urls.py 中的任何内容)。

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


def handler404(request):
    response = render_to_response('404.html', ,
                              context_instance=RequestContext(request))
    response.status_code = 404
    return response

在模板目录下放一个自定义的 404.html。

source : click here

【讨论】:

【参考方案4】:

创建一个视图来呈现您创建的 404.html 并将其设置为 urls.py 中的 handler404。

handler404 = 'app.views.404_view'

如果启用调试,Django 将呈现调试视图。否则,如果它不存在,它将按照 handler404 中指定的方式为所有类型的页面呈现 404 页面。

Customizing error views 上的 Django 文档。

查看this 答案以获取完整示例。

【讨论】:

谢谢,但是有没有办法可以在没有 debug=false 的情况下进行 404 处理,因为它破坏了我的 CSS,因为没有加载静态文件 @AnkanKumarGiri 这在this 线程中有很大的解释。请务必阅读所有答案。

以上是关于如果在 django 的 urls.py 中找不到,则将任何 url 重定向到 404.html的主要内容,如果未能解决你的问题,请参考以下文章

我收到错误:在 django 中找不到页面

在 Django Rest Framework 中找不到资源时返回自定义 404 错误

如果条件在urls.py - django

Django:使用 urls.py 进行分页

我在哪里可以找到“admin.site.urls”的源文件?

Django:如果在 urls.py 中登录,则重定向到不同的页面