python - Jinja 在 set block 中转义 HTML

标签 python html flask jinja2

我正在使用 Jinja {% set %} block 来定义我想要稍后呈现到页面的用户链接。但是,当我渲染变量时,所有 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 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/

相关文章:

python - 2D numpy argsort 索引在原始矩阵中使用时返回 3D

python - App Engine Python 的 Twitter 库?

javascript - 预加载图像数组以加快加载速度

python - 在 Flask 中获取数据 JSON

python - Pygame,按下一个键时正好执行 1 次命令,然后等待另一次单击

python - 使用 pathlib 的 rglob 处理缺少权限/组的情况

jquery - 如何使用 jquery 将 span 附加到 html 中存在的 span?

html - 带有右侧箭头的 Span 元素

python - 无法使用类似 gunicorn 的服务运行 Flask 应用程序

python - Flask:一个 RESTful API 和 SocketIO 服务器