Jinja在set块中转义了HTML

时间:2018-09-07 15:50:32

标签: python html flask jinja2

我正在使用Jinja // Hack to always generate a link for the stream $photo = null; $link = $streamItem->getPermalink(false, true); 块来定义一个用户链接,该链接要在以后呈现给页面。但是,当我渲染变量时,所有HTML均被转义,因此显示HTML而不是链接。

{% set %}

查看源代码显示:

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

在页面上显示文字HTML

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

如何呈现在<a href="/user/exampleuser"> exampleuser </a> 块中定义的链接而不是原始HTML?

2 个答案:

答案 0 :(得分:0)

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

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

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

或者您可以标记呈现它时产生安全性的变量。

{{ user_link|safe }}

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

答案 1 :(得分:0)

请注意:

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 %}