【问题标题】:Django RedirectView with a URL containing url-escaped characters带有包含 url 转义字符的 URL 的 Django RedirectView
【发布时间】:2014-06-16 11:19:20
【问题描述】:

我在 Django 中有一个 RedirectView,它从数据库中读取要重定向到的 URL。 我不控制给出哪个 URL,除非它确实是一个有效的 URL。

当保存在数据库中的 URL 具有这种形式时,就会出现问题:

http://www.example.com/example?q=http%3A%2F%2Fwww.google.com

您可能会注意到 URL 包含对 %3A%2F%2F 的“引用”,它代表 ://

问题在于,在将self.url 设置为该值后,RedirectView 会执行其dispatch 方法并在该行抛出异常:

url = self.url % kwargs

抛出的异常是:

ValueError: unsupported format character 'A' (0x41) at index 39

我认为发生这种情况是因为 python 尝试将 url 格式化为字符串并且在处理 % 时遇到了麻烦。但我不确定..

现在,kwargs dict 是空的,似乎解决问题的方法是在使用urllibunquote 方法执行调度之前“取消引用”url,该方法将%3A%2F%2F 转换回@987654333 @ 在字符串中。

这解决了问题,但我想知道是否有更“pythonic”的方式来处理这个问题,以及这是否确实是导致问题的原因。

谢谢!

【问题讨论】:

  • 是的,这就是导致您的问题的原因。您的解决方案对我来说似乎很好

标签: python django url


【解决方案1】:

我建议不要对字符串进行反编码,而是将% 转义为%%,以便使用类似printf 的字符串格式,这在我看来更简洁。但是,如果您需要在基本 URL 中支持参数,这可能会变得很棘手。您需要将它们一一提取并检查它是 URL 编码的字符还是 %-format 参数。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2012-04-29
    • 2013-05-09
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多