【问题标题】:Jinja escapes HTML in set blockJinja 在 set 块中转义 HTML
【发布时间】:2018-09-07 15:50:31
【问题描述】:

我正在使用 Jinja {% set %} 块来定义我想稍后呈现到页面的用户链接。但是,当我渲染变量时,所有 HTML 都被转义,因此它显示的是 HTML 而不是链接。

{% set user_link %}
    <a href="url_for('main.user', username=post.author.username)">
        {{ post.author.username }}
    </a>
{% endset %}

查看源码展示:

&lt;a href=&#34;/user/exampleuser&#34;&gt;
    exampleuser
&lt;/a&gt;

在页面上显示文字 HTML:

<a href="/user/exampleuser"> exampleuser </a>

如何呈现set 块中定义的链接而不是原始 HTML?

【问题讨论】:

    标签: python html flask jinja2


    【解决方案1】:

    Flask 的 Jinja 环境将自动转义呈现的变量,除非它们被标记为安全。 set 不会将其内容标记为安全,因为它不知道您打算将其用于什么。

    您可以在定义 set 块时将其标记为安全。 (这需要 Jinja >= 2.10。)

    {% set user_link|safe %}
        ...
    {% endset %}
    

    或者您可以在渲染时将它生成的变量标记为安全。

    {{ user_link|safe }}
    

    只需要一个。两者都使用是多余的,但不会破坏任何东西。

    【讨论】:

      【解决方案2】:

      请注意:

      href="{{ url_for('main.user', username=post.author.username) }}"

      {% set user_link %}
          <a href="{{ url_for('main.user', username=post.author.username) }}">
              {{ post.author.username }}
          </a>
      {% endset %}
      

      【讨论】:

        猜你喜欢
        • 2013-09-19
        • 2016-05-16
        • 1970-01-01
        • 2018-05-28
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        相关资源
        最近更新 更多