djangoでContextを使用するときにHTMLエンコーディングを無効にする方法
-
04-07-2019 - |
質問
私のdjangoアプリケーションでは、テンプレートを使用してメール本文を作成しています。パラメーターの1つはurlです。urlにはアンパーサンドで区切られた2つのパラメーターがあります。
t = loader.get_template("sometemplate")
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
})
print t.render(c)
レンダリング後: http://127.0.0.1/test?a=1&b=2
アンパサンドは、"& amp;"としてエンコードされたHTMLです。この問題を回避する1つの方法は、各パラメーターをテンプレートに個別に渡し、テンプレートにURLを作成することですが、それを避けたいのです。
コンテキストパラメータのHTMLエンコードを無効にする方法はありますか、少なくともアンパサンドのエンコードを回避する方法はありますか?
解決
1つの変数に対して無効にするには、 mark_safe
を使用します:
from django.utils.safestring import mark_safe
t = loader.get_template("sometemplate")
c = Context({
'foo': 'bar',
'url': mark_safe('http://127.0.0.1/test?a=1&b=2'),
})
print t.render(c)
または、Pythonコードから自動エスケープを完全にオフにするには、 Context
の初期化時に autoescape
引数を使用します:
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)
[自動HTMLドキュメンテーションのセクションでは、テンプレート内のオプションのいくつかをカバーしています。
他のヒント
または単に「安全」を使用します;テンプレートでフィルタリングします。
また、Djangoのドキュメントに精通することの重要性を十分に強調することはできません。このような多くの一般的な質問には、わかりやすい回答と説明があります(このような質問)、ドキュメントを読み、すべてがどのように機能するかを把握することで、「なぜそれを行ったのか」という質問に費やす時間を大幅に短縮できます。希望どおりに機能するものの構築に費やす時間を増やします。
所属していません StackOverflow