Python/Django:如何在所有URL前添加#号

2 投票
2 回答
513 浏览
提问于 2025-04-16 10:20

我正在用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 个回答

0

这是关于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

3

你误解了#号的意思。

在网址中,#号是用来分隔“片段”的。在#号后面的内容不会被发送到服务器。所以其实并不存在像“foo.com#/foo”这样的网址——对服务器来说,它只看到“foo.com”。因此,你无法进行任何服务器端的重定向。

如果你的JavaScript库是用片段来模拟导航的,你就需要用JavaScript来处理这个问题。

撰写回答