Django双转义引号

2024-09-27 23:19:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

1984: Curriculum Unit
by Donald R. Hogue, Center for Learning, George Orwell

"A center for learning publication"--Cover.

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

1984: Curriculum Unit
by Donald R. Hogue, Center for Learning, George Orwell

"A center for learning publication"--Cover.

问题似乎是“(引号)应该变成"被转义两次,结果是&"。这会导致奇怪的格式。我使用的是Django 1.0.2,所以应该是最新的(尽管我应该注意到我使用的是ubuntu9.04包含的包pythondjango),但是这种行为似乎与预期的行为相反。在

我看过一点django.utils.html.py,其中包含实际函数:

def escape(html):

"""Returns the given HTML with ampersands, quotes and carets encoded."""

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

escape=allow_lazy(escape,unicode)

不管怎么说,这看起来应该在发生其他事情之前逃过一劫,这没什么大不了的。所以我的怀疑是它被调用了两次。有什么想法吗?在

谢谢。在

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


Tags: djangoforbyhtmlunitcurriculumreplacelearning
2条回答

你不应该考虑在1.0版本中逃跑。如果你有一个模板

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

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

如果你有一个变量

^{pr2}$

以及

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>

哦,哈迪哈哈

我傻了,Google太聪明了,他们已经逃过了我正在解析的XML中的那些字符。你难道不知道吗,一个小时的摆弄才发现谷歌又比我聪明了!在

另外,如果其他人遇到类似的问题,我特别指的是在执行此类查询时返回的XML:http://books.google.com/books/feeds/volumes?q=1984,数据已经为您转义了!也就是说,这确实让我有点紧张,因为在我的模板中设置安全性意味着如果我从另一个我不太信任的来源获取数据。。。不管怎样,谢谢你的阅读!在

相关问题 更多 >

    热门问题