Jinja2セーフキーワード
{{ something.render() | safe }}
のような式が何をするのか理解するのに少し問題があります。
私が見たところ、safe
キーワードがないと、実際のコンテンツだけでなく、htmlドキュメント全体が出力されます。
私が知りたいのは、それが実際に何をするのか、それがどのように機能するのかということです。
通常、テキストはHTMLエスケープされます(したがって、<b>
は<b>
として書き出され、<b>
としてレンダリングされます)。
何かの後に|safe
を付けると、テンプレートエンジンに、テキストを自分でエスケープしたことを伝えます。つまり、「これを直接レンダリングしても安全です」。したがって、そのエンコーディングは行われません。
プログラムでセーフフィルターを使用したいと考えている人は、Jinja2が依存するmarkupsafe.Markup
クラスでラップしてください。