web-dev-qa-db-ja.com

Flask / Jinja2を使用してHTMLをテンプレートに渡す

FlaskおよびSQLAlchemyの管理者を作成しています。異なる入力のHTMLをrender_templateを使用してビューに渡したいと思います。テンプレートフレームワークはhtmlを自動的にエスケープするように見えるため、すべての<"'>はhtmlエンティティに変換されます。HTMLが正しくレンダリングされるように無効にするにはどうすればよいですか。

134
sharvey

理想的な方法は

{{ something|safe }}

自動エスケープを完全にオフにするよりも。

280
iamgopal

コードからHTMLセーフとして宣言することもできます。

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

次に、その値をテンプレートに渡すと、|safeする必要はありません。

94
Armin Ronacher

Jinja docsセクションから HTML Escaping

自動エスケープが有効になっている場合、明示的に安全とマークされた値を除き、すべてがデフォルトでエスケープされます。これらは、安全フィルターを使用して、アプリケーションまたはテンプレートでマークできます。

例:

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

エスケープする必要のない変数がたくさんある場合は、autoescapeブロックを使用できます。

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