我在理解{{ something.render() | safe }}
这样的表达方式时遇到了一些问题。
从我所看到的,如果没有safe
关键字,它会输出整个html文档,而不仅仅是真实的内容。
我想知道的是它实际上是什么,它是如何运作的。
答案 0 :(得分:19)
通常情况下,文字是HTML转义的(因此<b>
会被写为<b>
,这将呈现为<b>
)。
当您将|safe
置于某事之后,您告诉模板引擎您已经自行转义了文本,即“直接渲染它是安全的”。所以它不会为你做那种编码。
答案 1 :(得分:17)
答案 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}}
的任何地方以粗体显示唐纳德的姓氏。