Urls.py无法将#(磅)字符传递给Django中的视图,

时间:2013-10-15 08:59:14

标签: python regex django django-urls

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

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

我也试过这些模式

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

  

RFC 1808 (Relative Uniform Resource Locators):注意片段标识符(以及它之前的“#”)是   不被视为URL的一部分。但是,因为它是常用的   在与URL相同的字符串上下文中,解析器必须能够   在片段存在时识别片段并将片段放在一边作为片段的一部分   解析过程。