Django官方文档和web上的其他教程总是在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可以支持在传递给服务器的域之后输入的任何内容,但通过这种方式,您可以轻松地将“子页”添加到url,而不必像
accounts/loginreset?id=alkfjahgouasfjvn25jk1k25
在上面的例子中所说的,把它排除在外可能是有意义的。
Django的core design philosophies之一是url应该很漂亮。
因此,像
accounts/detail?name='abc'
这样的url应该映射为accounts/detail/abc/
。您可以在url配置中使用regex捕获它。这里的网址是相当整洁和用户友好。这将有助于搜索引擎正确索引您的页面(现在您可以忘记rel=canonical
),并将有助于搜索引擎优化。现在,考虑一个拖尾斜杠的原因,对于路径为
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/
为同一页保留两个副本。更新
除非在“设置”中显式定义
APPEND_SLASH=False
,并且为每个要使用的路由器(如果使用路由器)定义trailing_slash=False
,否则无法使POST/PUT/PATCH/DELETE方法与rest_framework
一起工作。这就好像你基本上会跳过这个大部分时间,你得浪费很多时间调试这个。Django建议使用append slashes
,但不强制使用。由开发人员决定是否附加斜杠。
来自使用
APPEND_SLASH
的中间件的the docsdjango并不需要它,它只是试图通过建议一种标准的url方式来帮助你的SEO。
是的,我知道斜杠与此中间件无关,但这是我能找到的关于可能原因的最佳解释
相关问题 更多 >
编程相关推荐