我正在使用Jinja {% set %}
块来定义我想稍后呈现给页面的用户链接。但是,当我渲染变量时,所有HTML都被转义,因此它显示HTML而不是链接。
{% set user_link %}
<a href="url_for('main.user', username=post.author.username)">
{{ post.author.username }}
</a>
{% endset %}
查看源显示:
<a href="/user/exampleuser">
exampleuser
</a>
这会在页面上显示文字HTML:
<a href="/user/exampleuser"> exampleuser </a>
如何渲染set
块中定义的链接而不是原始HTML?
Flask的Jinja环境将自动渲染渲染变量,除非它们被标记为安全。 set
没有将其内容标记为安全,因为它无法知道您打算使用它的内容。
您可以在定义时标记set
块安全。 (这需要Jinja> = 2.10。)
{% set user_link|safe %}
...
{% endset %}
或者,您可以在渲染时将其生成的变量标记为安全。
{{ user_link|safe }}
只需要一个。使用两者是多余的,但不会破坏任何东西。