【问题标题】:Render HTML tags from variable without escaping [duplicate]从变量渲染 HTML 标记而不转义 [重复]
【发布时间】:2015-07-18 09:12:15
【问题描述】:

我有一些 HTML 内容想要传递给模板进行渲染。但是,它会转义标签以使用 HTML 实体 (<),因此它们显示为代码而不是标记。如何渲染传递给模板的 html?

tags = """<p>some text here</p>"""
render_template ('index.html',tags=tags)
{{ tags }}
'&lt; some text here &gt;'

我想要一个带有文本的段落。

some text here

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    使用 jinja2 safe 过滤器:

    {{ tags | safe }}
    

    safe 过滤器告诉模板引擎不要自动转义字符串(因为您手动转义了它或者您确定字符串是安全的)。因此,如果字符串是由用户引入的,而您没有对其进行转义,则可能会引发安全问题(“不信任用户”)。

    编辑

    正如@davidism 所指出的,还有另一种方法 - 推荐的方法 - 将 HTML 传递到模板中:在 python 代码中使用 Markup 对象来包装要传递给模板的 html 代码。

    tags = Markup("<p>some text here</p>")
    

    在你的模板中你只使用:

    {{ tags }}
    

    将打印出来

    some text here

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2021-11-06
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多