使用Flask/Jinja2传递HTML到模板
我正在为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 }}
但是只在你信任的数据上这么做,因为如果不对不可信的数据进行转义,就会有跨站脚本攻击的风险。