【发布时间】: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 是空的,似乎解决问题的方法是在使用urllib 的unquote 方法执行调度之前“取消引用”url,该方法将%3A%2F%2F 转换回@987654333 @ 在字符串中。
这解决了问题,但我想知道是否有更“pythonic”的方式来处理这个问题,以及这是否确实是导致问题的原因。
谢谢!
【问题讨论】:
-
是的,这就是导致您的问题的原因。您的解决方案对我来说似乎很好