我正在从网站上抓取svg html代码。现在我想用该代码渲染模板(它存储在python中的变量中)。 svg代码是来自url-github.com/username/contributions的github的贡献图表。
SVG代码 -
<svg>
.....
</svg>
我无法完成此任务。如何将变量作为参数传递给render_template()函数?在某些格式中,它向我显示实际代码,在其他格式中,它根本不显示任何内容。
答案 0 :(得分:3)
据我所知,Flask使用JINJA2模板引擎,但同样适用于许多平台上的许多模板引擎。
出于安全原因,默认情况下,代码发送到JINJA2模板的任何HTML数据都将转义,即<svg>
将变为<svg>
。这就是它向您展示浏览器中实际代码的原因。
JINJA2允许你不能逃避HTML ,但这可能很危险,特别是如果代码是由用户提供的话。例如,可以将一些邪恶的JavaScript注入您的页面。因此,您最终需要保护您的应用和用户免受此类攻击。
也就是说,不转义HTML标记的其中一个选项是使用safe
过滤器。例如:
<div>
{{ svgCode|safe }}
</div>
有关详细信息,请参阅JINJA2文档:http://jinja.pocoo.org/docs/dev/templates/#html-escaping