Djangoの組み込みタグでif文を簡潔に書く
Djangoの組み込みタグを活用することで冗長になりがちなif文を簡潔に書くことができます。
firstof
False でない最初の変数の値を出力する場合に
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% else %}
fallback value
{% endif %}
以下のように書き換えることができます。
{% firstof var1 var2 var3 "fallback value" %}
その他応用
{# 自動エスケープなしで出力する #}
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
{# 一部の変数のみエスケープさせる #}
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
{# 変数に格納する #}
{% firstof var1 var2 var3 as value %}
for … empty
for文で登録内容があるかないかの判定は
<ul>
{% if athlete_list %}
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
{% else %}
<li>Sorry, no athletes in this list.</li>
{% endif %}
</ul>
for … emptyで簡潔に書き換えることができます。
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
yesno
変数がTrueとFalse(None)のときで切り替えるとき
{% if value %}
yeah
{% else %}
no
{% endif %}
フィルターで簡潔に書けます。yesno
{{ value|yesno:"yeah,no" }}
classを指定するときなどにシンプルに記載できます。
<div class="{{ new|yesno:"new" }}"></div>
default・default_if_none
初期値の指定
{# 入力の評価値が False の場合 #}
{{ value|default:"nothing" }}
{# 入力値が None のとき #}
{{ value|default_if_none:"nothing" }}