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 中的视图,的主要内容,如果未能解决你的问题,请参考以下文章

第三百零四节,Django框架,urls.py模块——

python - urls.py正则表达式帮助坐标

Django入门三之urls.py重构及参数传递

将用户名传递给通用 DetailView 时出错 - django 1.4.3

django:将 url 作为参数传递

需要在 .htaccess 重写规则中转义 # (hash/pound) 字符