我正在使用 Jinja {% set %}
block 来定义我想要稍后呈现到页面的用户链接。但是,当我渲染变量时,所有 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
block 中定义的链接而不是原始 HTML?
最佳答案
Flask 的 Jinja 环境将自动转义渲染的变量,除非它们被标记为安全。 set
不会将其内容标记为安全,因为它不知道您打算将其用于什么用途。
您可以在定义set
block 时将其标记为安全。 (这需要 Jinja >= 2.10。)
{% set user_link|safe %}
...
{% endset %}
或者您可以在渲染时将其生成的变量标记为安全。
{{ user_link|safe }}
只需要一个。两者同时使用是多余的,但不会破坏任何东西。
关于python - Jinja 在 set block 中转义 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225930/