Jinja 2安全关键字

cor*_*ump 15 python template-engine jinja2

我有点理解表达式的问题{{ something.render() | safe }}.

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

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

dka*_*ins 21

通常情况下,文本是HTML转义的(因此<b>会被写出来&lt;b&gt;,将其呈现为<b>).

当你把|safe东西放在后面时,你告诉模板引擎你已经自己转义了文本,即"直接渲染它是安全的".所以它不会为你做那种编码.

有关更多信息,请访问:http://jinja.pocoo.org/docs/templates/#html-escaping


imm*_*imm 18

safe过滤器显式地将一个字符串为"安全"的,也就是说,它不应该如果启用自动转义自动转义.

此过滤器的文档在此处.

请参阅手动转义部分,了解哪些字符有资格进行转义.


dat*_*ata 6

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


小智 5

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

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

生成的 HTML 会在模板包含 的任何地方以粗体显示 Donald 的姓氏{{name}}