在flask模板中渲染html字符串

jin*_*lei 6 html python templates jinja2 flask

我正在建立一个网页来展示文章.在我的数据库中,我必须使用属性,其中一个用于放置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)
Run Code Online (Sandbox Code Playgroud)

和我的观点功能:

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

首先,我试过:

<div class="post-body">
    {{post.body}}
</div>
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*ley 14

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

{{ post.body | safe }}
Run Code Online (Sandbox Code Playgroud)