29

我从 rss 提取提要并将数据存储在 appengine 数据库中。RSS 提要内容包括整个 html。所以我有这个python代码:

@app.route("/rssRead")
def pullRss():
    feedItem = db.getFeedItemByName(request.args.get('title',None), request.args.get('key',None))
    return render_template("rss.html", data= Markup(feedItem.html).unescape())

我的 html 模板如下所示:

{% extends "layout.html" %}
{% block body %}
{{ data }}
{% endblock %}

因此,当我查看显示实际 html 标记的页面时,如何取消转义 html 数据?

4

2 回答 2

109

这也应该有效。

{% extends "layout.html" %}
{% block body %}
{{ data|safe }}
{% endblock %}
于 2011-04-07T16:43:17.340 回答
16

而不是data=Markup(feedItem.html).unescape(),您应该使用data=Markup(feedItem.html). 这将做正确的事情并保持您的模板干净。

在这里调用 unescape() 是没有意义的(除非 feeditem.html 包含预先转义的 html,它可能不包含)。更重要的是,在这里使用 unescape() 会生成一个字符串/unicode 对象而不是 Markup 对象,这使 Jinja2 无法识别该字段包含需要转义的 html。这破坏了 Jinja2 的自动转义能力(这就是 Markup 类的目的!)我还迫使你未来的模板维护者记住这个字段需要手动转义,这会使模板代码因额外的调用而混乱。

于 2011-04-06T20:30:03.343 回答