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タグが役に立つことでしょう。