Flask

【Python】【Flask】flashメッセージの出力方法

MAX

Flaskのflashを使うことで、処理結果やエラー情報等を画面上に簡単に表示させられる。

スポンサーリンク

HTMLの設定

base.htmlに記載することで、共通でflashメッセージを出力できるようになる。

1# base.html
2<!-- flashの第二引数をtrueに設定 -->
3  {% with messages = get_flashed_messages(with_categories=true) %}
4    {% if messages %}
5      <ul class="flash">
6      {% for category, message in messages %}
7        <!-- メッセージ内にCRLFがある場合は改行して表示する -->
8        <li class="{{ category }}" >{{ message | replace("\r\n", "<br/>") | safe }}</li>
9      {% endfor %}
10      </ul>
11    {% endif %}
12  {% endwith %}
13

with_categoriesにtrueを設定することで、flashに第二引数(カテゴリー)を設定することが可能になる。(デフォルトだとfalse)

カテゴリーを設定することで、エラー時や正常時の区別をすることが可能となる。

また、get_flashed_messages(category_filter=["error"])等を設定することで、特定のカテゴリーに対してのみ、メッセージの出力処理を行うこともできる。

CSSの設定(カテゴリー作成)

カテゴリー毎にCSSを設定することで、処理結果(エラーや正常終了)に合わせてメッセージの出力形式を設定できる。

1style.css 
2.error {background: #FF9999; }
3.complete {background: #cae6f6; }

Pythonでのflashメッセージ出力

1# app.py
2
3from flask import flash, render_template, redirect
4
5def main():
6
7    #何か適当な処理
8
9    #エラー判定
10    if error:
11        #メッセージの設定
12        errorMessage = "正常に終了しませんでした。\r\n" + error
13
14        #フラッシュメッセージの出力
15        flash(errorMessage, "error")
16        return render_template('xxx.html')
17    else:
18        #メッセージの設定
19        infoMessage = "処理が正常終了しました。\r\n"
20
21        #フラッシュメッセージの出力
22        flash(infoMessage, "complete")
23        return render_template('xxx.html')


Python側の処理はシンプル。出力内容のメッセージを設定して、flashにメッセージとカテゴリーを渡す。

メッセージやカテゴリーをlistにした場合、htmlに設定した通り、各メッセージとカテゴリーでメッセージが出力される。

個人的には、カテゴリーを複数設定するよりは、1つのカテゴリーに対して、複数のメッセージを設定した方が、使い勝手が良い気がする。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました