【发布时间】:2012-09-02 17:13:57
【问题描述】:
我在理解 {{ something.render() | safe }} 这样的表达式的作用时有点问题。
据我所见,如果没有 safe 关键字,它会输出整个 html 文档,而不仅仅是真实内容。
我想知道的是,它实际上做了什么,它是如何运作的。
【问题讨论】:
标签: python template-engine jinja2
我在理解 {{ something.render() | safe }} 这样的表达式的作用时有点问题。
据我所见,如果没有 safe 关键字,它会输出整个 html 文档,而不仅仅是真实内容。
我想知道的是,它实际上做了什么,它是如何运作的。
【问题讨论】:
标签: python template-engine jinja2
【讨论】:
tojson。感谢您发布文档链接。
通常文本是 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 将在模板包含 {{name}} 的任何位置以粗体显示唐纳德的姓氏。
【讨论】: