html - python 3中的Jinja2 html表示
问题描述
我正在写一个烧瓶驱动的博客,我想以 XML 格式保存我的评论到浏览器,所以我打开了 XML 文件并从中读取。
from xml.etree.ElementTree import parse
def blue():
with open('blogcomment.xml') as file:
doc = parse(file)
return '\n'.join("""
<div class="card">
<span></span>
<div class="content">
<p class="date">%s</p>
<h3></h3>
<p class="desc">%s</p>
</div>
</div>
"""%(item.findtext('date'), item.findtext('body')) for item in doc.iterfind('entries/entry'))
然后我打电话给蓝色
@sqldb.route('/dbresult')
def dbresult():
f = blue()
return f
#输出:
2007 年 11 月 14 日
在 qui latine elaboraret,ad nam phaedrum mediocrem cotidieque。
2007 年 11 月 18 日
我得到了我订购的新立方体。这是一颗真正的珍珠。
这是我想要的,但我希望它出现在我博客的特定部分,所以我创建了
<!doctype html>
<html>
<head>
</head>
<body>
{{f}}
</body>
</html>
并将我的路线更改为
@sqldb.route('/dbresult')
def dbresult():
f = blue()
return render_template('dbresult.html', f=f)
当我运行它输出的代码时
<div class="card"> <span></span> <div class="content"> <p class="date">11/14/2007</p> <h3></h3> <p
class="desc">in qui latine elaboraret, ad nam phaedrum mediocrem cotidieque.</p> </div> </div> <div
class="card"> <span></span> <div class="content"> <p class="date">11/18/2007</p> <h3></h3> <p
class="desc">Got the new cube I ordered. It’s a real pearl.</p> </div> </div>
在浏览器上,因为浏览器没有解释 HTML,是来自 Jinja2 还是我做错了什么,我需要帮助。
博客评论.xml
<?xml version="1.0"?>
<blog>
<entries>
<entry>
<date>11/14/2007</date>
<name>Jeff</name>
<body>in qui latine elaboraret, ad nam phaedrum mediocrem cotidieque.</body>
</entry>
<entry>
<date>11/18/2007</date>
<name>Petter</name>
<body>Got the new cube I ordered. It’s a real pearl.</body>
</entry>
</entries>
</blog>
解决方案
Flask 的默认配置包括.html
模板的自动转义。因此,当您将变量{{ f }}
放入模板时,该f
变量将被视为不安全变量,并且任何“危险”字符(例如<
或>
)都将被转义(转换为 HTML 实体)。
为了防止这种行为,您可以使用安全模板过滤器,它将变量标记为安全,因此它不会被转义:
<!doctype html>
<html>
<head>
</head>
<body>
{{ f | safe }}
</body>
</html>
确保其中f
不包含任何恶意代码。
更好的方法是,在您的blue
方法中,您只需准备要呈现的数据(例如,从数据中制作字典列表),然后使用内置的for
控制语句在模板文件中呈现注释。
推荐阅读
- animation - Instagram 在 nativescript 中的应用评论框动画
- vbscript - 循环遍历 .CSV 文件时的总计
- android - Nativescript 5.4.0 构建失败并显示“找不到 sbg-bindings.txt”
- amazon-web-services - 如何通过节点 js 中的 AWS API Gateway 和 AWS lambda 获取我的谷歌智能家居操作的令牌 ID?
- wpf - 为什么 DragDrop.DoDragDrop 挤压 DataGridHyperlinkColumn 单击事件?
- php - 如何将命名的 Doctrine Entity Manager 获取到存储库?
- javascript - 如何为打字稿编写的模块编写插件加载器
- spring - RepositoryRestResource注解中的collectionResourceRel等可选元素中的“rel”是什么意思?
- vb.net - 如何从 VB.NET 中的 Datagridview 打印选定的行
- python - 用 tkinter 输入?