web-dev-qa-db-ja.com

Jinja2セーフキーワード

{{ something.render() | safe }}のような式が何をするのか理解するのに少し問題があります。

私が見たところ、safeキーワードがないと、実際のコンテンツだけでなく、htmlドキュメント全体が出力されます。

私が知りたいのは、それが実際に何をするのか、それがどのように機能するのかということです。

16
coredump

safeフィルタは、文字列を「安全」として明示的にマークします。つまり、自動エスケープが有効になっている場合は、自動的にエスケープしないでください。

このフィルターに関するドキュメントは ここ です。

手動エスケープ のセクションを参照して、エスケープの対象となる文字を確認してください。

19
imm

通常、テキストはHTMLエスケープされます(したがって、<b>&lt;b&gt;として書き出され、<b>としてレンダリングされます)。

何かの後に|safeを付けると、テンプレートエンジンに、テキストを自分でエスケープしたことを伝えます。つまり、「これを直接レンダリングしても安全です」。したがって、そのエンコーディングは行われません。

詳細情報: http://jinja.pocoo.org/docs/templates/#html-escaping

22
dkamins

プログラムでセーフフィルターを使用したいと考えている人は、Jinja2が依存するmarkupsafe.Markupクラスでラップしてください。

6
data