【问题标题】:How to render html content with jinja using flask? [duplicate]如何使用烧瓶用 jinja 呈现 html 内容? [复制]
【发布时间】:2012-10-01 11:33:42
【问题描述】:

我在一个应用程序中使用 Flask 来呈现来自 sqlite 数据库的一些数据。我的问题是当应用程序呈现一些内部包含 html 的文本时,显示为文本而不是 html。例如,数据库中的记录有以下文本:

My tailor <strong>is</strong> rich

html 页面按原样呈现:

<html>
<!-- snip .... -->
My tailor &gt;strong&lt;is&gt;/strong&lt; rich
<!-- snip .... -->
</html>

而且,我想要的是这个(“是”字必须更粗):

<html>
<!-- snip .... -->
My tailor <strong>is</strong> rich
<!-- snip .... -->
</html>

有人知道我该怎么做吗?

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

    如果您知道内容是安全的,只需使用safe 过滤器:

    {# In the Jinja template #}
    {% for article in articles %}
    <div class="article">{{article|safe}}</div>
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      另一种可能性是使用 jinja Markup 类,就像安全过滤器一样。这将允许您在不通过安全过滤器过滤内容的情况下呈现 HTML。下面是一个如何实现的示例。

      from jinja2 import Markup, escape
      
      def render_markup():
          return Markup("{0}{1}{2}{3}{4}".format(
              escape("My tailor "), 
              "<strong>", 
              escape("is"), 
              "</strong>", 
              escape(" rich")))
      

      之后,您可以在 Flask jinja 全局变量中注册您的函数,并从 jinja 模板中使用它。

      app.jinja_env.globals["render_markup"] = render_markup
      

      模板中不需要保险箱。

      <html>
      <!-- snip .... -->
      {{ render_markup() }}
      <!-- snip .... -->
      </html>
      

      【讨论】:

      • 嘿,只是一个有点愚蠢的例子,说明如何格式化更愚蠢的字符串,并正确使用转义函数:)
      • 感谢您提供该示例 ;)
      猜你喜欢
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多