1

我曾经通过 django URL 传递数据,而传递#character 无法通过urls.py,我使用模式作为

url(r'^pass/(?P<sentence>[\w|\W]*)/$',pass) 

我也尝试过这些模式

url(r'^pass/(?P<sentence>[a-zA-Z0-9-/:-?@#{-~!^_\'\[\]*]*)/$',pass) 

提前致谢。

4

2 回答 2

3

“#”字符在 URL 中标记内联锚点(同一页面内的链接),因此浏览器永远不会将其发送给 Django。

例如,如果 URL 是/something/pass/#test/something-else/浏览器将只发送/something/pass/到服务器。您可以改为尝试/something/pass/%23test/something-else/,23 是十六进制 ascii 代码#- 不漂亮(丑陋丑陋只是将它作为 get 变量传递)。

在 Django 方面您无能为力 - 在设计路由时,您最好避免在 URL 路径中使用具有特殊含义的字符 - 当然这是一个品味问题,但我真的认为在 URL 路径中传递的字符串应该是“ slugfied " 以删除任何有趣的角色。

于 2013-10-15T09:03:02.213 回答
0

浏览器不会将 url 片段部分(以“#”结尾)发送到服务器。为什么不先将数据转换为 base64,然后通过 url 传递数据。

RFC 1808(相对统一资源定位符):请注意,片段标识符(以及它前面的“#”)不被视为 URL 的一部分。但是,由于它通常与 URL 在相同的字符串上下文中使用,因此解析器必须能够在片段存在时识别它,并将其作为解析过程的一部分放在一边。

于 2013-10-15T09:02:42.817 回答