Django RedirectView,其URL包含url转义字符

时间:2014-06-16 11:19:20

标签: python django url

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

当数据库中保留的URL具有以下格式时,会出现问题:

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

您可能会注意到该网址包含"引用"到代表%3A%2F%2F的{​​{1}}。

问题是,在将://设置为此值后,RedirectView会执行其self.url方法并在此行上抛出异常:

dispatch

抛出的异常是:

url = self.url % kwargs

我认为这是因为python尝试将url格式化为字符串并且无法处理ValueError: unsupported format character 'A' (0x41) at index 39。但我不确定..

现在,% dict是空的,似乎解决问题的是#34; unquoting"使用kwargs urllib方法执行调度之前的网址,该方法会将unquote转换回字符串中的%3A%2F%2F

这解决了这个问题,但我想知道是否还有更多" pythonic"处理这个问题的方法,如果这确实是造成问题的原因。

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议不要对字符串进行de-urlencoding,而是将%转义为%%以便与printf一起使用 - 就像字符串格式化一样,在我看来这更清晰。但是,如果您需要支持基本URL中的参数,这可能会变得棘手。您需要逐个提取它们并检查它是否是URL编码的字符或%格式参数。