render html strings in flask templates

风格不统一 提交于 2019-12-23 09:20:45

问题


I'm building a web page to show articles. In my database, I have to attributes, one of which is used to put Markdown code and the other to save HTML code converted from the Markdown code. I want to get the HTML and add it to my base HTML. I use Flask framework and SQLAlchemy and the data is saved in sqlite database. My model:

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)

and my view function:

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

Firstly, I tried:

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

It shows the whole string with HTML tag. post.body.decode("utf-8") and post.body.decode("ascii") didn't work, either. When I debug the program, I found that the database returns u'string'. How can I get pure HTML code and apply it in my base HTML file?


回答1:


by default jinja2 (the template engine for flask) assumes input inside of {{ }} is unsafe and will not allow js or html inside of them ... you can solve this by using the safe filter inside your template. this will tell jinja2 that the content is safe to render as is, and not to escape the html/javascript

{{ post.body | safe }}


来源:https://stackoverflow.com/questions/35215842/render-html-strings-in-flask-templates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!