Jinja在set block中转义HTML

问题描述 投票:1回答:1

我正在使用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个回答
0
投票

Flask的Jinja环境将自动渲染渲染变量,除非它们被标记为安全。 set没有将其内容标记为安全,因为它无法知道您打算使用它的内容。

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

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

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

{{ user_link|safe }}

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

© www.soinside.com 2019 - 2024. All rights reserved.