[英]Django RedirectView with a URL containing url-escaped characters
我在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
字典为空,似乎可以解决问题的方法是使用urllib
的unquote
方法在分发之前执行“取消引用” URL,该方法将%3A%2F%2F
转换为字符串中的://
。
这解决了问题,但是我想知道是否还有一种更“ pythonic”的方式来解决这个问题,而这是否确实是导致问题的原因。
谢谢!
我建议不要将字符串取消urencoding,而是将%
转义为%%
,以便使用类似于printf
的字符串格式,我认为这更干净。 但是,如果您需要在基本URL中支持参数,这可能会变得棘手。 您需要一个一个地提取它们,并检查它是URL编码的char还是%
-format参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.