🐥
フラッシュメッセージを実装してみる
はじめに
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">×</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