为什么django urls以斜线结尾?

The*_*rer 16 python django

Django官方文档和Web上的其他教程总是在url的末尾使用尾部斜杠.例如:

url(r'^accounts/login/', views.login)  # login view in turn calls login.html

# instead of

url(r'^accounts/login', views.login)
Run Code Online (Sandbox Code Playgroud)

由于accounts是目录而且login (login.html)是文件,我们不应该使用第二个URL吗?这也将使GET参数看起来更有条理:

accounts/login?name='abc'  # login is a file that is accepting parameters
vs.
accounts/login/?name='abc' # login directory (maybe index) is accepting parameters??
Run Code Online (Sandbox Code Playgroud)

All*_*ітy 20

Django的核心设计理念之一URL应该是美丽的.

所以有些网址accounts/detail?name='abc'应该映射为accounts/detail/abc/.您可以在网址配置中使用正则表达式捕获它.这里的URL非常整洁,用户友好.这将有助于搜索引擎正确索引您的页面(现在您可以忘记rel=canonical),并将有助于搜索引擎优化.

现在是斜杠的原因,考虑一个about.html在路径上为用户相对解析的视图(在任何框架中),users/awesomeUser

既然users/awesomeUserusers/awesomeUser/不同,

  1. 如果用户在users/awesomeUser,浏览器将解析它,users/about.html因为没有我们不想要的尾部斜杠

  2. 如果用户在users/awesomeUser/,浏览器将解析它,users/awesomeUser/about.html因为有一个尾部斜杠

  • child相对family/parent/family/parent/child.
  • child相对family/parentfamily/child.

关于最终URL的Django设计理念,

从技术上讲,foo.com/barfoo.com/bar/是两个不同的URL,搜索引擎机器人(以及一些Web流量分析工具)会将它们视为单独的页面.Django应该努力"规范化"URL,以便搜索引擎机器人不会混淆.

这是APPEND_SLASH设置背后的原因.(APPEND_SLASH允许您强制将斜杠附加到URL)

还是不相信?

  1. 由于django将两个网址视为不同,如果你正在缓存你的应用程序,Django将保留两个相同页面的副本at user/awesomeUseruser/awesomeUser/.
  2. 如果不将斜杠附加到URL(如果您计划构建REST API),则必须遇到除GET之外的HTTP方法的问题.

更新

rest_framework除非您APPEND_SLASH=False在设置中明确定义并且trailing_slash=False必须使用每个路由器(如果使用路由器),否则不能使POST/PUT/PATCH/DELETE方法使用.这就像你基本上要跳过这个大多数时间而且你要浪费很多时间来调试它.Django建议append slashes并不强迫它.

它取决于开发人员是否附加斜杠.

  • 该答案说明了在浏览器如何解析其子链接方面,带斜杠和不带斜杠的区别。但这并没有解释为什么Django选择一种特定的方式而不是另一种方式。我也不知道答案,但是到目前为止,开始时似乎是一个随机选择。从第一天开始,它可能会发生其他变化,只要这些URL坚持一种形式,它们仍然是“确定的”。因此,在我看来,这就像是编码风格的事情,即没有确定的对与错,只有约定。 (2认同)

Say*_*yse 5

来自文档使用的中间件的APPEND_SLASH

\n\n
\n

搜索引擎索引器会将它们视为单独的 URL \xe2\x80\x93,因此 \xe2\x80\x99 是标准化 URL 的最佳实践。

\n
\n\n

django 不需要它,它只是试图通过建议一种标准的 url 处理方式来帮助您的 SEO。

\n\n

是的,我知道斜杠与这个中间件无关,但这是我能找到的关于可能原因的最佳解释

\n