Передача HTML в шаблон с использованием Flask/Jinja2

Я создаю admin для Flask и SQLAlchemy, и я хочу передать HTML для разных входов на мой взгляд, используя render_template. Сценарий шаблонов, похоже, автоматически выходит из html, поэтому все < "' > преобразуются в html-объекты. Как отключить это, чтобы HTML-код отображался правильно?

Ответ 1

идеальный способ заключается в

{{ something|safe }}

чем полностью отключить автоэкспонирование.

Ответ 2

Вы также можете объявить его безопасным HTML из кода:

from flask import Markup
value = Markup('<strong>The HTML String</strong>')

Затем передайте это значение шаблонам, и они не должны |safe его.

Ответ 3

Из раздела Jinja Docs HTML Escape:

Когда автоматическое экранирование включено, по умолчанию все экранируются, кроме значений, явно помеченных как безопасные. Они могут быть помечены приложением или в шаблоне с помощью фильтра | safe.

Пример:

 <div class="info">
   {{data.email_content|safe}}
 </div>

Ответ 4

Если у вас много переменных, которые не нужно экранировать, вы можете использовать блок autoescape:

{% autoescape off %}
{{ something }}
{{ something_else }}
<b>{{ something_important }}</b>
{% endautoescape %}