29

我在理解表达式 like 的作用时遇到了一点问题{{ something.render() | safe }}

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

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

4

4 回答 4

35

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

这个过滤器的文档在这里

请参阅手动转义部分以查看哪些字符有资格进行转义。

于 2012-09-09T18:02:55.837 回答
31

通常文本是 HTML 转义的(所以<b>会写成&lt;b&gt;,呈现为<b>)。

当您|safe添加某些内容时,您是在告诉模板引擎您已经自己转义了文本,即“直接渲染它是安全的”。所以它不会为你做那个编码。

欲了解更多信息:http: //jinja.pocoo.org/docs/templates/#html-escaping

于 2012-09-09T18:03:43.453 回答
8

对于任何来到这里希望以编程方式使用安全过滤器的人:将其包装在markupsafe.MarkupJinja2 所依赖的类中。

于 2017-04-24T10:51:37.683 回答
2

扩展@data的答案,这是一个使用示例markupsafe.Markup

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

生成的 HTML 将在模板包含的任何位置以粗体显示 Donald 的姓氏{{name}}

于 2021-03-12T07:37:57.547 回答