Djangoの組み込みタグでif文を簡潔に書く

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" }}

参考リンク