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

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

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

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

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

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

{% with name="World" greeting="Hello" %}
<p>{{ greeting }}, {{ name }}</p>
{% endwith %}

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

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

{% with images=profile.image_set.all|dictsort:"uploaded_at" %}
<div>{{ images.0.image }}</div>
{% endwith %}

まとめ

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください