模板和标记

时间:2011-06-19 00:22:43

标签: google-app-engine django-templates markup

我使用Google App Engine,我遇到了下一个问题。我需要在“数据存储”文本中存储“< p> My text< / p>”。当我使用Django 0,96的模板时,一切都井然有序。文本显示有预期的标记。但我将模板更改为Django 1.2的模板,我的标记已更改为HTML实体。如何解决这个问题?

P.S。我不使用Django助手或任何其他第三方库。


如果过滤模式是模板的默认模式,那么使用“safe”或“autoescape on”看起来就像是黑客。我试图理解Django的作者是如何想象自己使用模板的。我不认为除了材料出版物之外的记者也为每篇文章创建模板。即必须有一些允许格式文本,tinyMCE或Markdown的方法。但是当标记存储在DB中时,模板会将其显示为html实体。

当然,可以使用过滤器“safe”或“autoescape on”。但是我不明白在大多数情况下它会禁用模板中的清理。

可能我不对吗?哪里我错了?

2 个答案:

答案 0 :(得分:2)

使用safe filterautoescape off模板标记。确保您了解XSS的优先级;用户输入的内容不应被视为安全。

评论:

{{ body|safe }}等同于autoescape块。我不知道为什么这样做不起作用,除非T. Abilo是对的并且数据存储已经引用了它。

TinyMCE很难防范XSS,因为它会向你发送表现性的html。 Markdown编辑器(如MarkItUp)更容易,因为您可以在服务器端安全地渲染降价。因为它是你需要一个过滤器除了表示html白名单之外的所有内容:{{ body|presentationalonly }}This one可以胜任这项工作。 Bleach适用于更严格的白名单。

答案 1 :(得分:0)

我遇到了类似的问题,所以也许您可以查看以下内容:

  • 是您的数据存储区中显示为"<p><"等的标记吗?
  • 如果是这样,您可以在模板中将其添加到字符串.replace("&lt;", "<").replace("&gt;", ">"),同时仍使用autoescape或类似内容
  • 如果有效,您也可以直接在处理程序中更改它,如下所述:http://wiki.python.org/moin/EscapingHtml
相关问题