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??
最佳答案
Django的core design philosophies之一是网址应该很漂亮。
因此,应将诸如 accounts/detail?name='abc'
之类的URL映射为 accounts/detail/abc/
。您可以在网址配置中使用正则表达式捕获它。在这里,URL非常简洁且易于使用。这将有助于搜索引擎正确索引您的页面(现在您可以忘记rel=canonical
),并且对seo有所帮助。
现在是斜杠结尾的原因,请考虑一个 View (在任何框架中),该 View 相对于路径的用户 about.html
由于users/awesomeUser
和users/awesomeUser
不同,users/awesomeUser/
,则浏览器会将其解析为users/awesomeUser
,因为没有尾部斜杠,我们不希望users/about.html
,则浏览器会将其解析为users/awesomeUser/
,因为后面有一个斜杠
Django Design philosophy on Definitive URLs读取,
还是不服气?users/awesomeUser/about.html
和user/awesomeUser
的同一页面保留两个副本。
更新
您不能使POST/PUT/PATCH/DELETE方法与user/awesomeUser/
一起使用,除非您为要使用的每个路由器(如果使用路由器)在设置和rest_framework
中明确定义APPEND_SLASH=False
。就像您基本上会跳过大多数次,而您却要浪费大量时间调试它。 Django建议使用trailing_slash=False
,但不要强行使用。
由开发人员决定是否添加斜线。