在 Flask 模板中渲染 html 个字符串

render html strings in flask templates

我正在构建一个网页来显示文章。 在我的数据库中,我有一个属性,一个用来放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") 也不起作用。 我调试程序的时候发现数据库returnsu'string'。 如何获得纯 HTML 代码并将其应用到我的基础 HTML 文件中?

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

{{ post.body | safe }}