Flask のテンプレートエンジンである Jinja2 では、条件に基づいて表示を分岐させるために、いくつかの方法があります。
主に、if
、elif
、else
ステートメントを使用します。
この記事では、基本的な使用方法を説明します。
Flask とは? Jinja2 とは? といった解説は省略しています。 公式サイトからご確認ください。
Welcome to Flask — Flask Documentation (3.0.x)
基本的な if
これが一番基本的な表示の切り替え方法です。
{% if user.is_authenticated %}
<p>こんにちは、{{ user.name }}さん!</p>
{% else %}
<p>こんにちは、ゲストさん!</p>
{% endif %}
この例では、user.is_authenticated
が True
の場合、ユーザーの名前を表示し、それ以外の場合は「ゲスト」と表示します。
複数条件の elif
おおくの言語では else if
で他の条件を指定できますよね。
それが jinja2 では elif
に該当します。
(elseif
って書いて動かなかったのは私だけではないはず)
{% if user.role == 'admin' %}
<p>管理者としてログインしています。</p>
{% elif user.role == 'user' %}
<p>ユーザーとしてログインしています。</p>
{% else %}
<p>ゲストとしてアクセスしています。</p>
{% endif %}
この例では、ユーザーの役割に応じて異なるメッセージを表示します。
複合条件の使用
AND 句 に該当する書き方は and
です。
{% if user.is_authenticated and user.role == 'admin' %}
<p>管理者としてログインしています。</p>
{% else %}
<p>ゲストか一般ユーザーとしてアクセスしています。</p>
{% endif %}
この例では、ユーザーが認証されているかつ管理者である場合にのみ、特定のメッセージを表示します。
for ループ内の if
もちろん、for
など他の記述内に埋め込むこともできます。
<ul>
{% for item in items %}
{% if item.is_available %}
<li>{{ item.name }}</li>
{% endif %}
{% endfor %}
</ul>
この例では、利用可能なアイテムのみをリスト表示します。
インライン if 式
この例では、一行で条件に応じた表示を行います。
<p>{{ 'ログイン済み' if user.is_authenticated else '未ログイン' }}</p>
参考
おわりに
Python を用いたアプリケーション開発では、おそらく Django, Flask, FastAPI あたりのフレームワークがよく採用されると思います。
それぞれ特徴があるので、混同しないようにしないとですね。
コメント