在烧瓶模板中呈现 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 标签
如何使用 Meteor Spacebars 模板动态呈现 HTML?