在烧瓶模板中呈现 html 字符串

Posted

技术标签:

【中文标题】在烧瓶模板中呈现 html 字符串【英文标题】:render html strings in flask templates 【发布时间】:2016-05-14 22:33:22 【问题描述】:

我正在构建一个网页来显示文章。 在我的数据库中,我必须拥有属性,其中一个用于放置 Markdown 代码,另一个用于保存从 Markdown 代码转换而来的 html 代码。我想获取 HTML 并将其添加到我的基本 HTML 中。 我使用Flask 框架和SQLAlchemy,数据保存在sqlite 数据库中。 我的模型:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String)
    body = db.Column(db.String)
    timestamp = db.Column(db.String)
    tag = db.Column(db.String)
    info = db.Column(db.String)
    body_markdown = db.Column(db.String)

和我的视图函数:

def post(post_id):
    post = db.session.query(Post).filter(Post.id == post_id).first()
    return render_template('post.html',
                           post = post,)

首先,我尝试了:

<div class="post-body">
    post.body
</div>

它显示带有 HTML 标记的整个字符串。 post.body.decode("utf-8")post.body.decode("ascii") 也不起作用。 调试程序时,发现数据库返回u'string'。 如何获取纯 HTML 代码并将其应用到我的基本 HTML 文件中?

【问题讨论】:

【参考方案1】:

默认情况下,jinja2(flask 的模板引擎)假定 内部的输入是不安全的,并且不允许在其中输入 js 或 html ...您可以通过在模板中使用 safe 过滤器来解决这个问题。这将告诉 jinja2 内容可以安全地按原样呈现,而不是转义 html/javascript

 post.body | safe 

【讨论】:

以上是关于在烧瓶模板中呈现 html 字符串的主要内容,如果未能解决你的问题,请参考以下文章

无法在 react.js 的模板字符串中呈现 html 标签

如何将模板字符串呈现为 HTML?

如何使用 Meteor Spacebars 模板动态呈现 HTML?

将 Web 模板与 Flask 集成 [重复]

如何在 express.js 玉模板中呈现 markdown?

Python烧瓶多进程:无法“呈现”用于发送网格电子邮件正文的html页面