Python/Django:如何在所有URL前添加#号
我正在用Django和jQuery Mobile开发一个移动网页应用。我的问题是,jQuery Mobile希望所有的链接前面都加一个#,这样它才能准确地记录浏览历史。
举个例子:http://www.fest.com/#/foo/1/
我想知道怎么才能自动把所有指向从: /foo/1/ 到: /#/foo/1/的链接重定向。
如果我不这样做,有人直接访问/foo/1/,然后点击一个指向/bar/2/的链接,他们最终的URL路径会变成: /foo/1/#/bar/2/
我非常想避免这种情况,因为这会引发很多问题。有什么好的办法来解决这个问题吗?
2 个回答
这是关于jquery mobile的内容,所以答案有点不同。jquery mobile在使用AJAX时,会用#something来处理历史记录。每当你点击一个 <a href=...
的链接时,AJAX调用就会被触发。
你可以这样链接到一个页面:<a href="some.html?var1=foo"
,这样JQM就会通过AJAX加载这个页面,而不会重新加载整个页面,并且会把这个内容存储在DOM文档中,以便下次不需要再加载。此时,网址的末尾会更新为#some.html
,这就是历史记录的管理方式。
<a href="#something"
在普通页面中是无法正常工作的,因为jquery mobile会接管这个操作。
想要获取关于jquery mobile中链接的所有信息,可以查看这里: http://jquerymobile.com/demos/1.0a2/#docs/pages/link-formats.html
你误解了#号的意思。
在网址中,#号是用来分隔“片段”的。在#号后面的内容不会被发送到服务器。所以其实并不存在像“foo.com#/foo”这样的网址——对服务器来说,它只看到“foo.com”。因此,你无法进行任何服务器端的重定向。
如果你的JavaScript库是用片段来模拟导航的,你就需要用JavaScript来处理这个问题。