将 Django URLS.py 配置为在 URL 中以 end / 重写后保留 #anchors

Posted

技术标签:

【中文标题】将 Django URLS.py 配置为在 URL 中以 end / 重写后保留 #anchors【英文标题】:Configure Django URLS.py to keep #anchors in URL after it rewrites it with a end / 【发布时间】:2011-03-22 23:38:17 【问题描述】:

在我的 django 应用程序中,我将 URLS.PY 配置为接受对 /community/user/id 和 /community/user/id/ 的请求:

url(r'^(?P<username>[\w-]+)/(?P<cardId>\d+)/$', 'singleCard.views.singleCard', name='singleCardView'),

我这样做是因为有时人们会添加一个结尾“/”,而我不想引发 404。

但是,我的 javascript 应用程序的某些部分有时会添加以下形式的锚标记:

/community/user/id#anchorIuseInJavscriptToDoSomething

我遇到的问题是 Django 会立即将 URL 重写为:

/community/user/id/ 

以 / 结尾并删除 #anchorIuseInJavscriptToDoSomething

我想把它改写成:

/community/user/id#anchorIuseInJavscriptToDoSomething/

这样我在页面中的 javascript 仍然可以看到锚点并正常工作。如何调整这个正则表达式来做到这一点?我不太擅长正则表达式,并通过示例学习了这一点...

【问题讨论】:

这是 Safari 的问题,而不是 Django。 Safari anchors on links not working.的可能重复 【参考方案1】:

您可以将斜杠设为可选:

url(r'^(?P<username>[\w-]+)/(?P<cardId>\d+)/?$', 'singleCard.views.singleCard', name='singleCardView'),

【讨论】:

【参考方案2】:

浏览器应在重定向后处理重新附加锚点。您的问题与 Django 无关。

【讨论】:

知道为什么它不在 Safari 中以及是否有其他解决方案?例如配置 Django 接受两个 URL 但不重写它们? @Tristan:这是 Safari 的一个已知问题。已经有针对它的错误提交,但如果你也提交一个也不会受到伤害。 顺便说一句,尝试在重定向中包含锚点只会将问题转移到 ie8、iirc【参考方案3】:

为什么要将其更改为/community/user/id#anchorIuseInJavscriptToDoSomething/?这是无效的。应该是/community/user/id/#anchorIuseInJavscriptToDoSomething。哈希后的元素不是 URL 的一部分,不会发送到服务器。

【讨论】:

有时用户会手动输入 /community/user/id/ 并以斜线结尾。当他们这样做时,我不想返回 404。我还需要能够在其中有一个哈希,所以理想情况下我不想重写 URL,但两者都可以工作

以上是关于将 Django URLS.py 配置为在 URL 中以 end / 重写后保留 #anchors的主要内容,如果未能解决你的问题,请参考以下文章

Django 笔记 05 urls.py详解

八Django学习之urls.py详细配置规则

初步学习Django-第三篇:URLS.PY文件详解

4.对urls.py的解释

Django-使用 include() 配置 URL

Django 路由 urls.py