Configure Django URLS.py to keep #anchors in URL after it rewrites it with a end /
在我的 django 应用程序中,我将 URLS.PY 配置为接受对 /community/user/id 和 /community/user/id/ 的请求:
url(r’^(?P<username>[\\w-]+)/(?P<cardId>\\d+)/$’, ‘singleCard.views.singleCard’, name=’singleCardView’),
我这样做是因为有时人们会添加一个结尾”/”而我不想引发 404。
但是,我的 javascript 应用程序的某些部分有时会添加以下形式的锚标记:
1
|
/community/user/id#anchorIuseInJavscriptToDoSomething
|
我遇到的问题是 Django 会立即将 URL 重写为:
1
|
/community/user/id/
|
以 / 结尾并删除 #anchorIuseInJavscriptToDoSomething
我想把它改写成:
1
|
/community/user/id#anchorIuseInJavscriptToDoSomething/
|
这样,我在页面中的 javascript 仍然可以看到锚点并正常工作。如何调整这个正则表达式来做到这一点?我不太擅长正则表达式,并通过示例学习了这一点…
- 这是 Safari 的问题,而不是 Django。
- 链接上的 Safari 锚点可能重复不起作用。
你可以使尾部斜线可选:
1
|
url(r‘^(?P<username>[\\w-]+)/(?P<cardId>\\d+)/?$’, ‘singleCard.views.singleCard’, name=‘singleCardView’),
|
为什么要把它改成/community/user/id#anchorIuseInJavscriptToDoSomething/?这是无效的。它应该是 /community/user/id/#anchorIuseInJavscriptToDoSomething。散列后的元素不是 URL 的一部分,不会发送到服务器。
- 有时用户会手动输入 /community/user/id/ 并以斜线结尾。当他们这样做时,我不想返回 404。我还需要能够在那里有一个哈希,所以理想情况下我不想重写 URL,但两者都可以工作
浏览器应在重定向后处理重新附加锚点。您的问题与 Django 无关。
- 知道为什么它不在 Safari 中以及是否有其他解决方案?例如配置 Django 以接受两个 URL 但不重写它们?
- @Tristan:这是 Safari 的一个已知问题。已经有针对它的错误提交了,但是如果你也提交了一个也不会受到伤害。
- 顺便说一句,试图在重定向中包含锚只会将问题转移到 ie8、iirc
来源:https://www.codenong.com/3367194/