在flask模板中渲染html字符串

时间:2016-02-05 03:32:20

标签: python html templates flask jinja2

我正在建立一个网页来展示文章。 在我的数据库中,我必须使用属性,其中一个用于放置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 个答案:

答案 0 :(得分:7)

默认情况下jinja2(烧瓶的模板引擎)假设{{ }}内部的输入不安全,并且不允许在其中使用js或html ...您可以使用safe过滤器来解决此问题在你的模板里面。这将告诉jinja2内容可以安全地渲染,而不是逃避html / javascript

{{ post.body | safe }}