17

私の 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

アンパサンドは、"&" として HTML エンコードされていることに注意してください。この問題を回避する 1 つの方法は、各パラメーターを個別にテンプレートに渡し、テンプレートで URL を作成することですが、それは避けたいと思います。

コンテキスト パラメータの HTML エンコーディングを無効にする方法、または少なくともアンパサンドのエンコーディングを回避する方法はありますか?

4

2 に答える 2

24

単一の変数に対してオフにするには、次を使用します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 コードから自動エスケープを完全にオフにするには、次の引数を初期化するときに使用しautoescapeContextます。

c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)

ドキュメントの[Automatic HTML escaping] をオフにする方法のセクションでは、テンプレート内のオプションの一部について説明しています。

于 2008-10-26T00:13:28.067 に答える
9

または、テンプレートで「安全な」フィルターを使用してください。

また、Django のドキュメントに精通することの重要性はいくら強調してもしすぎることはありません。このような多くの一般的な質問には、簡単に見つけられる回答と説明 (このようなもの) があり、ドキュメントを読み、すべてがどのように機能するかを理解することで、「なぜそうなったのか」を尋ねるのに費やす時間が大幅に短縮されます。そのため、思い通りに機能するものを構築する時間を増やすことができます。

于 2008-10-26T02:59:43.630 に答える