django path 路径最后是否加 / 的奇怪问题,希望各位看看?

开始是路径结尾没斜杠

  • path('schoolhot',xxx_funciton)
  • 此时只能访问 http://127.0.0.1:8000/schoolhot

改成路径结尾加上斜杠


再改成上面的第一种 path

  • path('schoolhot',xxx_funciton)
  • 此时访问 http://127.0.0.1:8000/schoolhot 也会重定向到 http://127.0.0.1:8000/schoolhot/
  • 访问 http://127.0.0.1:8000/schoolhot/路径不匹配
  • 看了 f12,确实是浏览器重定向,不是 django 做的
  • 试了解决方法好像是只能是清除浏览器缓存,此时就可以访问 http://127.0.0.1:8000/schoolhot
  • 感觉这。。。。太坑了,如果你从来没访问成功过带斜杠的路径就没事,一旦访问成功过,就会被记录下来,以后再访问不带斜杠的会直接重定向到有斜杠,这。。。。。。
阅读 6.5k
2 个回答

为了保证url的唯一性,加斜杠和不加斜杠本来就是两个url,只是浏览器默认会在不加斜杠的路由做一次重定向,因此我们在设计url的时候最好给末尾都加/,以保证不加斜杠的时候也能正确映射到制定的路由,否则不加斜杠是无法正确映射到试图函数的。

这个重定向就是django搞的,我记得有个设置是APPEND_SLASH,就是自动给请求的url末尾补上/,方法就是重定向,具体为什么要清理缓存才能不被重定向我不是很清楚,可能因为是永久重定向所以浏览器直接自动跳转了。不过只要你规范好url的格式,比如要求必须要以/结尾,就没有这种问题了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题