LoginSignup
0

More than 1 year has passed since last update.

posted at

djangoの条件分岐処理についてまとめる

今回のお題

今回のお題は条件分岐です。

djangoテンプレートの条件分岐処理はpythonのそれとは勝手が違う部分がいくつかあるのでそこに関してまとめます。

繰り返し処理でも似たような試みをしているのでよろしければどうぞ。

目次

  • and, orについて
  • yesnoフィルター
  • firstof

and, orについて

djangoテンプレートのandとorはandを先に処理するというルールが決まっており、かつ()で無理矢理順番を変えることはできません。

なので、orを先に処理して欲しければif文をネストさせることになります。

{% if x % 2 == 0 or y == 10 and z != 0 %}
<!-- 上記は次のものと等価 -->
if x % 2 == 0 or (y == 10 and z != 0):

if (x % 2 == 0 or y == 10) and z != 0:
<!-- ↑のようにしたければ↓のように書く -->
{% if y == 10 and z != 0 %}
  {% if x % 2 == 0 %}

また、10 < x < 30のような書き方もできません。

if 10 < x < 30:
# これは次のように書く
{% if x > 10 and x < 30 %}

yesnoフィルター

yesnoフィルターを用いると、対象の値がtrue, false, noneのいずれかによって表示する値を変えることができます。

{{ is_teacher?|yesno:"教師,生徒,部外者" }}

上記の例であれば、is_teacher?という変数の真偽値に応じて教師・生徒・部外者のいずれかが出力されるようになっています。

なお、Noneの場合の値を省略した場合には、Noneの場合もfalseの値が表示されます。

firstof

{% first 1 2 ... n %}

とすることで、falseではない最初の値を出力します。

値1 ~ 値nに関しては変数とそれ以外を混ぜることができるので、

{% firstof 変数1 変数2 ... 変数n "文字列" %}

のようにしておけば、変数が全てfalseもしくはivewsから与えられていない場合には"文字列"を出力するというようにすることもできます。

終わりに

以上、djangoに特有の(pythonにはない)条件分岐処理についてまとめました。

慣れるのが若干大変ですが、うまく使いこなせればコードが楽に描けるようになるので早く身につけたいですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0