🐥

フラッシュメッセージを実装してみる

2024/01/19に公開

はじめに

Djangoでレシピの投稿サイトを開発していて、ユーザーが操作した後に操作結果を通知したいと思いました。
そこでDjangoで標準提供されているフラッシュメッセージを使って実装したので、備忘録としてまとめておきます。

Viewでメッセージフレームワークを読み込む

まずは、通知させたい画面のViewファイルでメッセージフレームワークを読み込みます。

from django.contrib import messages

messagesをimportすることで、メッセージフレームワークを使用できます。
このメッセージフレームワークはsettings.pyに初めから追加されています。

INSTALLED_APPS = [
    'django.contrib.messages',
]

Viewで表示処理を実装する

次にメッセージを表示させたい画面のクラスに表示処理を書きます。

def form_valid(self,form):
  messages.success(self.request,"更新しました")
  return super().form_valid(form)

Templateにメッセージを追加する

メッセージを表示させたいテンプレートでメッセージを呼びます。

{%if messages%}
    <ul class="messages">
      {% for message in messages %}
      <div{% if message.tags %} class="my-3 alert alert-{% if message.tags == "error" %}danger{% else %}{{ message.tags }}{% endif %} alert-dismissible fade show"{% endif %} role="alert">
                {{ message }}
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
      {% endfor %}
    </ul>
    {% endif %}

メッセージはmessagesという変数にリスト形式で渡っています。
リストから取り出すためにfor文でループ処理して、その中でif文で判定しています。

<div{% if message.tags %} class="my-3 alert alert-{% if message.tags == "error" %}danger{% else %}{{ message.tags }}{% endif %} alert-dismissible fade show"{% endif %} role="alert">
                {{ message }}

messages.tagsにはsuccessやerrorが入っています。
他にも以下のメッセージタグがあります。

レベル定数 タグ
DEBUG debug
INFO info
SUCCESS success
ERROR error
WARNING warning

実際の画面

実装はここまでです。
実際の画面を確認してみます。

画面上部に編集が成功したことを指す「更新しました」が表示されています。
デザインは各自で自由に設定してください。

Discussion