Jinja 2安全关键字

时间:2012-09-09 17:58:05

标签: python template-engine jinja2

我在理解{{ something.render() | safe }}这样的表达方式时遇到了一些问题。

从我所看到的,如果没有safe关键字,它会输出整个html文档,而不仅仅是真实的内容。

我想知道的是它实际上是什么,它是如何运作的。

4 个答案:

答案 0 :(得分:19)

通常情况下,文字是HTML转义的(因此<b>会被写为&lt;b&gt;,这将呈现为<b>)。

当您将|safe置于某事之后,您告诉模板引擎您已经自行转义了文本,即“直接渲染它是安全的”。所以它不会为你做那种编码。

有关详细信息:http://jinja.pocoo.org/docs/templates/#html-escaping

答案 1 :(得分:17)

safe过滤器明确将字符串标记为“安全”,即如果启用了自动转义,则不应自动转义。

此过滤器的文档为here

请参阅manual escaping部分,了解哪些字符有资格进行转义。

答案 2 :(得分:5)

对于来这里寻找以编程方式使用安全过滤器的人:将其包装在Jinja2所依赖的markupsafe.Markup类中。

答案 3 :(得分:1)

扩展@data 的回答,这里有一个使用 markupsafe.Markup 的例子:

import markupsafe
vals = {}
vals["name"] = markupsafe.Markup("<b>Duck</b>, Donald")
html = template.render(vals)

生成的 HTML 将在模板包含 {{name}} 的任何地方以粗体显示唐纳德的姓氏。