Djangoのテンプレート内で変数を設定する方法

DBの情報を出力したいとき、基本的にはviews.py側で変数へ代入し、テンプレート側で展開するやり方がほとんどだと思います。

が、どうしてもテンプレート側で新たに変数を設定したいというケースに遭遇しました。

テンプレート側で変数をセットする方法をメモします。

テンプレートタグ「with」で変数をセットする

with というテンプレートタグで変数を設定できます。

{%!w(MISSING)ith name="World" greeting="Hello" %!}(MISSING)
<p>{{ greeting }}, {{ name }}</p>
{%!e(MISSING)ndwith %!}(MISSING)

アクセスに手間がかかるメソッドに対し、withタグは絶大な効果を発揮します。

例えば下の例はprofileというオブジェクトにぶら下がっている全てのimageオブジェクトをuploaded_at属性でソートし、最初のオブジェクトの画像を拾って出力する。的なやつです。

{%!w(MISSING)ith images=profile.image_set.all|dictsort:"uploaded_at" %!}(MISSING)
<div>{{ images.0.image }}</div>
{%!e(MISSING)ndwith %!}(MISSING)

まとめ

可読性が下がるのであまりテンプレート側でごちゃごちゃ設定したくないですが、背に腹はかえられないとき、withタグが役に立つことでしょう。