dan*_*ast 14 django http-status-code-404
根据文档,这应该是相当简单的:我只需要定义handler404.目前我在做,在我的顶部urls.py:
urlpatterns = [
...
]
handler404 = 'myapp.views.handle_page_not_found'
Run Code Online (Sandbox Code Playgroud)
该应用程序已安装.相应的视图只是(目前我只想在404的情况下重定向到主页):
def handle_page_not_found(request):
return redirect('homepage')
Run Code Online (Sandbox Code Playgroud)
但这没有效果:显示标准(调试)404页面.
文档有点含糊不清:
handler404在哪里定义?文件说URLconf但是,究竟在哪里?我有几个应用程序,每个都有不同的urls.py.我能把它放进去吗?在顶部URLconf?为什么?这记录在哪里?django.http.Http404, django.http.HttpResponseNotFound,django.http.HttpResponse(用status=404)?Sha*_*ang 10
正如我们所讨论的,您的设置是正确的,但在settings.py中您应该这样做DEBUG=False.它更像是一个生产功能,不能在开发环境中工作(除非你DEBUG=False当然是在dev机器中).
Debug应该为False并添加到view *args和中**kwargs。添加到urls.pyhandler404 = 'view_404'
def view_404(request, *args, **kwargs):
return redirect('https://your-site/404')
Run Code Online (Sandbox Code Playgroud)
如果我不添加args和kwargs服务器,则得到500。
所有其他答案都不是最新的。这是在 Django 3.1 中对我有用的内容:
网址.py
from django.conf.urls import handler404, handler500, handler403, handler400
from your_app_name import views
handler404 = views.error_404
handler500 = views.error_500
Run Code Online (Sandbox Code Playgroud)
视图.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)
Run Code Online (Sandbox Code Playgroud)
请注意,您必须编辑此代码以在 urls.py 中的导入语句中反映您的应用程序名称以及在 views.py 中的 html 模板路径。
要在自定义页面上呈现404 错误响应,请执行以下操作:
在你的项目目录中打开settings.py并修改DEBUG如下:
DEBUG = False
Run Code Online (Sandbox Code Playgroud)
在同一目录下创建一个文件并命名为views.py,插入以下代码:
from django.shortcuts import render
def handler404(request, exception):
return render(request, 'shop/shop.html')
Run Code Online (Sandbox Code Playgroud)
最后打开urls.py同一项目目录中的文件并添加以下代码:
from django.contrib import admin
from . import views
handler404 = views.handler404
urlpatterns = [
path('admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)