Джинджа избегает HTML в блоке набора - PullRequest
0 голосов
/ 07 сентября 2018

Я использую блок 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?

1 Ответ

0 голосов
/ 07 сентября 2018

Среда Flask Jinja будет автоматически отображать переменные, если они не помечены как безопасные. set не помечает его содержимое как безопасное, поскольку не может знать, для чего вы собираетесь его использовать.

Вы можете пометить блок set как безопасный при его определении. (Для этого требуется Джинджа> = 2.10.)

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

Или вы можете пометить переменную, которую она создает, безопасной, когда вы ее визуализируете.

{{ user_link|safe }}

Требуется только один. Использование обоих излишне, но ничего не сломает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...