You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中CommonMiddleware在自定义中间件中失效问题求助

排查CommonMiddleware自动补全斜杠失效的原因

以下是具体排查步骤:

  • 确认APPEND_SLASH配置正确
    Django默认APPEND_SLASH=True,若在settings.py中手动设置为False,CommonMiddleware会完全关闭自动补全斜杠的功能。检查项目配置文件,确保没有APPEND_SLASH = False的设置。

  • 检查URLconf中是否存在冲突路由
    如果urls.py中存在不带结尾斜杠的同路径路由(比如path('sura/<int:sura>', sura_handler)),当访问/sura/10时,Django会直接匹配该路由,不会触发CommonMiddleware的重定向逻辑。确认你的路由配置中只有带结尾斜杠的path('sura/<int:sura>/', sura_handler, name='sura_handler')。

  • 验证CommonMiddleware的执行优先级
    虽然你的MIDDLEWARE列表中CommonMiddleware在自定义中间件之前,但可以临时注释掉quran.middleware.PageNotFoundMiddleware,然后访问/sura/10测试是否返回301重定向:

    • 若注释后重定向正常,说明自定义中间件的响应处理逻辑可能间接影响了结果(比如在某些场景下提前返回了响应,但从你的代码看,这种可能性较低)。
    • 若注释后仍无重定向,问题出在CommonMiddleware本身的触发条件或其他前置中间件干扰。
  • 检查请求路径是否被前置中间件修改
    前面的中间件(如SecurityMiddleware)若修改了request.path_info,可能导致CommonMiddleware无法正确匹配路由。可以在自定义中间件的__call__方法开头先打印一次request.path_info,对比后续打印的内容是否有变化。

  • 确认路由匹配逻辑
    确保/sura/10/确实能匹配到对应的视图函数,且没有其他路由规则优先匹配了/sura/10(比如正则路由re_path(r'^sura/\d+$', ...)会优先匹配无斜杠的路径)。

内容的提问来源于stack exchange,提问作者zamoosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:46