Django 官方文档和网络上的其他教程总是在 url 末尾使用尾部斜杠。前任:
url(r'^accounts/login/', views.login) # login view in turn calls login.html
# instead of
url(r'^accounts/login', views.login)
由于 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??
原文由 The Wanderer 发布,翻译遵循 CC BY-SA 4.0 许可协议
Django 的 核心设计理念 之一是 URL 应该是漂亮的。
所以像
accounts/detail?name='abc'
这样的一些 url 应该被映射为accounts/detail/abc/
。您可以在您的 url 配置中使用正则表达式捕获它。这里的 URL 非常简洁且用户友好。这将有助于搜索引擎正确索引您的页面(现在您可以忘记rel=canonical
)并且有助于 seo。现在尾部斜杠的原因,考虑一个视图(在任何框架中)相对解析
about.html
对于路径中的用户,users/awesomeUser
因为
users/awesomeUser
和users/awesomeUser/
不同,如果用户位于
users/awesomeUser
,浏览器会将其解析为users/about.html
因为没有我们不想要的尾部斜杠如果用户位于
users/awesomeUser/
,浏览器会将其解析为users/awesomeUser/about.html
因为尾部有斜杠Django Design philosophy on Definitive URLs 读到,
还是不相信?
user/awesomeUser
和user/awesomeUser/
为同一页面保留两个副本。更新
您不能使 POST/PUT/PATCH/DELETE 方法与
rest_framework
一起使用,除非您在设置中明确定义APPEND_SLASH=False
和trailing_slash=False
必须使用(如果你使用路由器)。 _这就像你基本上大部分时间都会跳过这个_,你必须浪费大量时间来调试它。 Django 推荐append slashes
并不强制。是否附加斜杠取决于开发人员。