Django Double Escaping Quotes等

时间:2009-07-21 07:30:21

标签: python django

我正在经历我认为有些奇怪的行为。特别是如果我有这样的字符串:

  

1984年:课程单位
        作者:Donald R. Hogue,学习中心,George Orwell         
        “学习出版中心” - 封面。          

在Django模板系统自动转义后会产生以下结果:

  

1984年:课程单位
        作者:Donald R. Hogue,学习中心,George Orwell         
        & quot;学习出版中心& quot; - 封面。          

问题似乎是“(引用),应该成为"被转义两次,导致&"。这导致奇怪的格式化。我正在使用Django 1.0。 2,所以它应该是最新的,(虽然我应该注意到我使用的是包含python-django的Ubuntu 9.04),但这种行为似乎与预期的行为相反。

我看了一下django.utils.html.py,其中包括实际功能:

  

def escape(html):

     
    

“”“返回带有符号,引号和插入符号的给定HTML。”“”

         

return mark_safe(force_unicode(html).replace('&','&amp;').replace('<','&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'",'&#39;'))

  
     

escape = allow_lazy(escape,unicode)

无论如何,看起来它应该逃避&amp;在其他任何事情之前,这将是好的。所以我怀疑是它被召唤两次。有什么想法吗?

感谢。

更新:我怀疑它可能与Ubuntu的Django有关,它列为“1.0.2-1”所以我安装了“1.0.2-final”并且正在体验同样的问题。

2 个答案:

答案 0 :(得分:1)

你不应该考虑在1.0中逃避。如果您有模板

<html>
 <body>
  & == &amp; in HTML
 </body>
</html>

它应该在打印前将&编码为&amp;

如果您有变量

<html>
 <body>
  {{ msg }}
 </body>
</html>

def view(request) :
  msg = "& == &amp; in HTML"

如果应该以同样的方式打印。

您想要自己进行编码的唯一一次是您需要粘贴原始html。像:

def view(request) :
  msg = '<img src="http://example.com/pretty.jpg" />This picture is very pretty'

并在您的模板中

<html>
 <body>
  {{ msg|safe }}
 </body>
</html>

答案 1 :(得分:1)

哦哈哈哈哈,

愚蠢的我,谷歌非常聪明,他们已经逃脱了我正在解析的XML中的那些字符。难道你不知道吗,一小时的努力才意识到谷歌再次让我失望了!

P.S。如果其他人遇到类似的问题,我特别指的是在执行此类查询时返回的XML:http://books.google.com/books/feeds/volumes?q=1984,数据已经为您转义!话虽如此,它确实让我处于边缘,因为在我的模板中放置安全意味着如果我从其他来源获得我不太信任的数据......无论如何,感谢阅读!