繁体   English   中英

包含URL包含转义字符的URL的Django RedirectView

[英]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字典为空,似乎可以解决问题的方法是使用urllibunquote方法在分发之前执行“取消引用” URL,该方法将%3A%2F%2F转换为字符串中的://

这解决了问题,但是我想知道是否还有一种更“ pythonic”的方式来解决这个问题,而这是否确实是导致问题的原因。

谢谢!

我建议不要将字符串取消urencoding,而是将%转义为%% ,以便使用类似于printf的字符串格式,我认为这更干净。 但是,如果您需要在基本URL中支持参数,这可能会变得棘手。 您需要一个一个地提取它们,并检查它是URL编码的char还是% -format参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM