使用Flask/Jinja2传递HTML到模板

276 投票
7 回答
183493 浏览
提问于 2025-04-16 01:00

我正在为Flask和SQLAlchemy搭建一个管理后台,我想通过render_template把不同输入的HTML传递到我的视图中。这个模板框架似乎会自动对HTML进行转义,所以所有的<"'>字符都被转换成了HTML实体。请问我该如何关闭这个功能,让HTML能够正确显示呢?

7 个回答

50

来自Jinja文档的 HTML转义 部分:

当自动转义功能开启时,默认情况下所有内容都会被转义,只有那些明确标记为安全的值不会被转义。这些安全值可以在应用程序中标记,也可以在模板中通过使用 |safe 过滤器来标记。

示例:

<div class="info">
   {{ data.email_content|safe }}
</div>
151

MarkupSafe 是一个可以让 Jinja 自动处理安全性的工具。你可以导入 Markup,用它来声明一个值是安全的,可以在 HTML 中使用:

from markupsafe import Markup
value = Markup('<strong>The HTML String</strong>')

把这个值传给模板后,你就不需要在它上面使用 |safe 过滤器了。

530

要在显示一个值的时候关闭自动转义,可以使用 |safe 这个过滤器。

{{ something|safe }}

但是只在你信任的数据上这么做,因为如果不对不可信的数据进行转义,就会有跨站脚本攻击的风险。

撰写回答