Django 3.2配置404跳转至首页不生效该如何解决?
Django 3.2 自定义404重定向不生效解决方案
常见原因及对应解决方法
1. handler404配置位置错误
handler404 必须配置在项目根urls.py(即settings.py中ROOT_URLCONF参数指向的urls文件)的全局作用域,不能写在子应用的urls.py内,也不能放在urlpatterns列表中,否则无法被Django识别加载。
2. 模块导入错误
要确认两处导入逻辑正确:
- views.py中需要提前导入
HttpResponseRedirect,否则启动时虽然可能不报错,但运行时会触发异常返回默认错误页:from django.http import HttpResponseRedirect - 根urls.py中导入的views模块,必须是定义了
view_404函数的对应视图模块,不能和其他app的views混淆。
3. ALLOWED_HOSTS配置异常
DEBUG=False 时必须在settings.py中正确配置ALLOWED_HOSTS,例如本地测试时设置为:ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
配置错误时Django会优先抛出400错误,也会干扰404处理逻辑的正常触发。
4. 中间件拦截响应
如果配置了自定义中间件,需要排查是否有中间件在响应阶段修改了404状态的返回结果,覆盖了你自定义的重定向逻辑。
正确配置参考
项目根urls.py
from django.contrib import admin from django.urls import path # 替换为你实际的app名称导入对应views from your_app_name import views urlpatterns = [ path('admin/', admin.site.urls), # 其余自定义路由 ] # handler404放在urlpatterns外面,全局配置 handler404 = views.view_404
对应views.py
from django.http import HttpResponseRedirect def view_404(request, exception=None): return HttpResponseRedirect("/")
配置完成后重启Django服务即可生效。
内容的提问来源于stack exchange,提问作者devnull
相关产品推荐
相关产品推荐

