djangoでContextを使用するときにHTMLエンコーディングを無効にする方法

StackOverflow https://stackoverflow.com/questions/237235

  •  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のドキュメントに精通することの重要性を十分に強調することはできません。このような多くの一般的な質問には、わかりやすい回答と説明があります(このような質問)、ドキュメントを読み、すべてがどのように機能するかを把握することで、「なぜそれを行ったのか」という質問に費やす時間を大幅に短縮できます。希望どおりに機能するものの構築に費やす時間を増やします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top