我在理解表达式 like 的作用时遇到了一点问题{{ something.render() | safe }}
。
据我所见,没有safe
关键字它会输出整个 html 文档,而不仅仅是真实的内容。
我想知道的是它实际上做了什么,它是如何运作的。
我在理解表达式 like 的作用时遇到了一点问题{{ something.render() | safe }}
。
据我所见,没有safe
关键字它会输出整个 html 文档,而不仅仅是真实的内容。
我想知道的是它实际上做了什么,它是如何运作的。
通常文本是 HTML 转义的(所以<b>
会写成<b>
,呈现为<b>
)。
当您|safe
添加某些内容时,您是在告诉模板引擎您已经自己转义了文本,即“直接渲染它是安全的”。所以它不会为你做那个编码。
欲了解更多信息:http: //jinja.pocoo.org/docs/templates/#html-escaping
对于任何来到这里希望以编程方式使用安全过滤器的人:将其包装在markupsafe.Markup
Jinja2 所依赖的类中。
扩展@data的答案,这是一个使用示例markupsafe.Markup
:
import markupsafe
vals = {}
vals["name"] = markupsafe.Markup("<b>Duck</b>, Donald")
html = template.render(vals)
生成的 HTML 将在模板包含的任何位置以粗体显示 Donald 的姓氏{{name}}
。