根据documentation,这应该相当简单:我只需要定义urls.py
。目前我正在我的顶级urlpatterns = [
...
]
handler404 = 'myapp.views.handle_page_not_found'
:
def handle_page_not_found(request):
return redirect('homepage')
已安装该应用程序。相应的视图只是(目前我只想在404的情况下重定向到主页):
404
但这没有效果:显示标准(调试)handler404
页面。
文档有点含糊不清:
URLconf
?文档在urls.py
中说明,但究竟在哪里?我有几个应用程序,每个都有不同的URLconf
。我能把它放进去吗?在顶部django.http.Http404
?为什么?这在哪里记录?django.http.HttpResponseNotFound
,django.http.HttpResponse
,status=404
(//span[@class='fc-title'][.='Holiday4']
)吗?答案 0 :(得分:8)
正如我们所讨论的,您的设置是正确的,但在settings.py中,您应该DEBUG=False
。它更像是一个生产功能,并且在开发环境中不起作用(除非你在开发机器中有DEBUG=False
)。
答案 1 :(得分:3)
调试应为 False 并添加到视图*args
和**kwargs
。添加到urls.py handler404 = 'view_404'
def view_404(request, *args, **kwargs):
return redirect('https://your-site/404')
如果我不添加args,则kwargs服务器将获得500。
答案 2 :(得分:2)
所有其他答案都不是最新的。这是在Django 3.1中对我有用的东西:
urls.py
from django.conf.urls import handler404, handler500, handler403, handler400
from your_app_name import views
handler404 = views.error_404
handler500 = views.error_500
views.py
def error_404(request, exception):
context = {}
return render(request,'admin/404.html', context)
def error_500(request):
context = {}
return render(request,'admin/500.html', context)
注意,您将必须编辑此代码以在urls.py的import语句中反映您的应用名称,并在views.py中反映html模板的路径。
答案 3 :(得分:1)
要在自定义页面上呈现 404错误响应,请执行以下操作:
在您的项目目录中,打开settings.py
并按如下所示修改DEBUG
:
DEBUG = False
在同一目录中创建一个文件并将其命名为views.py
,并插入以下代码:
from django.shortcuts import render
def handler404(request, exception):
return render(request, 'shop/shop.html')
最后打开同一项目目录中的urls.py
文件,并添加以下代码:
from django.contrib import admin
from . import views
handler404 = views.handler404
urlpatterns = [
path('admin/', admin.site.urls),
]