Urls.py 无法将#(pound) 字符传递给 Django 中的视图,
Posted
技术标签:
【中文标题】Urls.py 无法将#(pound) 字符传递给 Django 中的视图,【英文标题】:Urls.py unable to pass #(pound) character to a view in Django, 【发布时间】:2013-10-23 00:21:39 【问题描述】:我曾经通过 django URL 传递数据,而传递#character 无法通过urls.py
,我使用的是模式
url(r'^pass/(?P<sentence>[\w|\W]*)/$',pass)
我也尝试过这些模式
url(r'^pass/(?P<sentence>[a-zA-Z0-9-/:-?@#-~!^_\'\[\]*]*)/$',pass)
提前致谢。
【问题讨论】:
【参考方案1】:“#”字符标记 URL 中的内联锚(同一页面内的链接),因此浏览器永远不会将其发送给 Django。
例如,如果 URL 是 /something/pass/#test/something-else/
,则浏览器将仅向服务器发送 /something/pass/
。您可以改用/something/pass/%23test/something-else/
,23 是#
的十六进制ascii 代码 - 不漂亮(丑丑只是将它作为get 变量传递)。
在 Django 方面你无能为力 - 在设计路由时,你最好避免在 URL 路径中使用具有特殊含义的字符 - 当然这是一个品味问题,但我真的认为字符串是在 URL 路径中传递的应该是“slugfied”以删除任何有趣的字符。
【讨论】:
谢谢..但是用#字符发送数据会被破坏..是否是django的格式? @Paulo Scardine django 永远不会在 URL 路径中收到 #,无论您在 urls.py 中放置什么,因为浏览器不会发送它。只需在 chrome 调试器或 firebug 中检查网络面板即可查看正在发送的内容。【参考方案2】:浏览器不会将 url 片段部分(以“#”结尾)发送到服务器。为什么不先将你的数据转换成base64,然后通过url传递数据。
RFC 1808 (Relative Uniform Resource Locators) :请注意,片段标识符(以及它前面的“#”)是 不被视为 URL 的一部分。但是,由于它是常用的 在与 URL 相同的字符串上下文中,解析器必须能够 识别存在的片段并将其作为 解析过程。
【讨论】:
我是 python 和 django webframework 的新手,现在我正在尝试转换 base64 并将其传递给 URL 的建议。非常感谢以上是关于Urls.py 无法将#(pound) 字符传递给 Django 中的视图,的主要内容,如果未能解决你的问题,请参考以下文章