djangoのテンプレートには、便利な組み込みタグやフィルタリファレンスが用意されています。
本日はそんな組み込みフィルタリファレンスのyesnoの使い方を紹介します。
コンテンツ
環境
環境は以下になります。
・macOS Big Sur
・django 2.0
・Python 3.7
・djangoのテンプレートのif文が使える
使い方
まずはいきなり使用しても理解が追いつかないと思いますので、一般的な条件分岐(if文)を利用したコードから紹介していきます。
以下のケースではcountryという変数がTrueの場合は、<li>ブラジル</li>というliタグを出力し、そうではない(False)場合は何も出力しないという結果を表示しています。
sample.html
1 2 3 4 5 6 7 8 9 |
<ul> <li>日本</li> <li>アメリカ</li> <li>フランス</li> {% if country %} <li>ブラジル</li> {% else %} {% endif %} </ul> |
次は、yesnoを利用した出力方法を紹介します。
上のsample.htmlと全く同じ意味の文です。
sample2.html
1 2 3 4 5 6 |
<ul> <li>日本</li> <li>アメリカ</li> <li>フランス</li> {{ country|yesno:'<li>ブラジル</li>,' }} </ul> |
出力結果としてはcountryという値が呼ばれた時に、それがTrueであれば<li>ブラジル</li>を出力し、Falseであれば何も出力しないという実行結果になります。
さらに補足するとコロン(:)に入れる値の一番目がyesの時の出力を示し、二番目の値がnoの時の出力を示しています。
yesnoフィルターの発展的な使い方
例えば、class属性に特定の属性値をつけるかつけないかなどの発展的な使われ方は現場でされるのではないでしょうか。
具体的にはこんな感じです。
1 |
<li class="{{ if country|yesno:'opacity,non-opacity,None' }}">ブラジル</li> |
countryがTrueの時は、opacityという属性値をliタグにつけて、Falseの場合はnon-opacityという属性値をliタグにつけるというようなやり方です。
またTrueでもFalseでもない場合は、Noneを引数として渡すことも可能です。
参考
https://docs.djangoproject.com/ja/2.0/ref/templates/builtins/
最後に
いかがでしたでしょうか。
以上が、「【django】templateの組み込みフィルタのifに代わるyesnoの使い方」の紹介記事になります。
djangoの組み込みテンプレートタグにはこれ以外にも多く存在していますので、より効果を試して利用してみてはいかがでしょうか?