Python Tech

Jinjaテンプレートで if 変数 is None 条件式を記述する方法 [Python]

2021年9月6日

JinjaはWebサーバーなどで使用されるマークアップテンプレートエンジンのPythonのライブラリです。

非常に軽い動作にもかかわらず、Python使いなら直感的に書きやすい仕様を持っているエンジンでもあります。

今回はそんな直感に反する事例をひとつ解説しています。

 

結論

None ではなく、noneを使う。

 

{% if var_a is none %} {# noneはすべて小文字#}
...
{% endif %}

 

実行環境

  • Python 3.9.6
  • Jinja2==3.0.1

 

Jinjaの if(文)

Noneでなく、かつFalseでもない変数かどうかを評価するにはシンプルに次のように書く。pythonと同様です。

 

{% if var_a %}
....
{% endif %}

 

Jinjaの is 式

pythonで何気なく使っている if A is B: という条件式があると思いますが、Jinjaの世界の is はただの演算子というより test (テスト)を実行するオペレーターの役割を果たします。

is の後に書く表現は test のメソッド名になります。

そのため、次の文はエラーになります。

 

{% if var_a is None %}
...
{% endif %}

 

このようにPythonの世界の is 演算子と同じ使い方をしても、 "None()" というテストは無いのでエラーとなります。

本気で var_a が None かどうかを検証したいなら次のようにしましょう。

 

{% if var_a is none %}
...
{% endif %}

 

この文は、『var_a を none() というテストメソッドで評価する(Noneかどうか検証する)』という意味になります。

使えるテストメソッドはドキュメントで列挙されています。例えば、変数が定義されているかどうかを調べる defined() や is False を書き換える false() などはよく使うでしょう。

 

今回参考にしたページ・資料

Template Designer Documentation — Jinja Documentation (3.0.x)

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。日常での学びを記事にしています。

人気の記事

1

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるようになるためのスクール選びで失敗 ...

2

先日の記事では、初心者からフリーランスプログラマーになる難しさと、それでもなんとか稼げるようになるにはどうしたらいいか解説しました。 今回の記事では、稼げるフリーランサーになるために必要な要素を、もう ...

3

気休めだけの甘い言葉は書きません。 最近は多くの企業やサイトで、使い捨てられるプログラマーが欲しいがために、甘い言葉で初心者プログラマを誘い出しています。 この記事では、まずは「現実」をちゃんと理解し ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのスピナー(処理中のマーク)として ...

5

※画像はずとまよの新曲とは一切関係ありません   ずっと真夜中でいいのに。(以下、ずとまよ)の新曲『勘ぐれい』のMVが12月1日に公開されましたね。 MV前に公開されていた原曲を聴き、神曲な ...

6

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 state(変数、コンポーネン ...

-Python, Tech
-, ,

© 2021 ペンギンのーと