【问题标题】:Jinja 2 safe keywordJinja 2 safe keyword
【发布时间】:2012-09-02 17:13:57
【问题描述】:

我在理解 {{ something.render() | safe }} 这样的表达式的作用时有点问题。

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

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

【问题讨论】:

    标签: python template-engine jinja2


    【解决方案1】:

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

    关于这个过滤器的文档是here

    请参阅manual escaping 部分,了解哪些字符可以转义。

    【讨论】:

    • 我最终使用了tojson。感谢您发布文档链接。
    【解决方案2】:

    通常文本是 HTML 转义的(因此 <b> 将被写为 <b>,它会呈现为 <b>)。

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

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

    【讨论】:

      【解决方案3】:

      对于希望以编程方式使用安全过滤器的任何人:将其包装在 markupsafe.Markup 类中,Jinja2 依赖于该类。

      【讨论】:

      • 我知道已经有几年了,但你能展示一些示例代码吗?
      • @doghousedean 抱歉,没有
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-24
        • 2018-10-21
        • 1970-01-01
        • 2020-10-06
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        相关资源
        最近更新 更多