DEBUG模式下配置Django Debug Toolbar后出现404错误该如何解决?
Django Debug Toolbar 404 错误排查解决步骤
核心问题修复:修正urls.py路由覆盖逻辑
你当前的DEBUG判断块中直接对urlpatterns重新赋值,会清空之前定义的admin、业务路由,导致所有原有路由失效,正确写法是在原有路由基础上追加debug toolbar路由:
urlpatterns = [ path('admin/', admin.site.urls), path('', include('mileage.urls')), ] if settings.DEBUG: import debug_toolbar # 先加debug toolbar路由,再拼接原有路由,不要直接覆盖原有urlpatterns urlpatterns = [ path('__debug__/', include(debug_toolbar.urls)), ] + urlpatterns urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
调整中间件优先级
DebugToolbarMiddleware需要放在所有响应类中间件的最前方,避免被其他中间件拦截请求,调整MIDDLEWARE顺序如下:
MIDDLEWARE = [ # 将debug toolbar中间件移到最顶部 'debug_toolbar.middleware.DebugToolbarMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # 其余原有中间件保持原有顺序不变 ... ]
确认DEBUG开关状态
检查settings.py中DEBUG = True是否配置正确,DEBUG为False时debug toolbar的路由不会注册,自然返回404。
本地开发环境无需执行collectstatic
collectstatic是生产环境打包静态资源用的命令,本地开发时Django会自动从各APP的static目录、STATICFILES_DIRS路径中拉取静态资源,提前执行collectstatic反而可能导致静态资源优先级冲突,可先删除手动生成的static根目录,重启服务测试。
校验INTERNAL_IPS配置
如果是通过容器、虚拟机或者局域网其他设备访问服务,访问IP不是127.0.0.1时,需要把对应访问IP加入INTERNAL_IPS列表,临时测试也可以配置为INTERNAL_IPS = ["*"]验证是否为IP限制导致的问题。
内容的提问来源于stack exchange,提问作者Vitalii Mytenko
相关产品推荐
相关产品推荐

