(最終更新月:2021年12月)
「特定の場面で任意のメッセージが出てくるようにしたい!」
「Djangoのメッセージフレームワークの使い方が知りたい!」
というDjango初学者の方へ向けての記事となります
当記事を通じて、
- Djangoでのメッセージフレームワークの書き方
- 実例コード
について解説・ご紹介していきます
当記事はアプリ開発~公開までをご紹介しているシリーズの一記事になります
最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます
興味のある方は下記よりシリーズをまとめたページへお進みください

メッセージフレームワークで必要な設定を確認
まずは「settings.py」で下記の記述があるか確認しよう!
INSTALLED_APPS = [
#...,
'django.contrib.messages',
...
]
MIDDLEWARE = [
#...,
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
#...,
]
TEMPLATES = [
{
#...,
'OPTIONS': {
'context_processors': [
#...,
'django.contrib.messages.context_processors.messages',
],
#...,
},
},
]
確認したい変数は、
- INSTALLED_APPS
- MIDDLEWARE
- TEMPLATES
の3つです
メッセージフレームワークの使い方
メッセージフレームワークは、ビュークラス(関数)で作成し、HTMLテンプレートで受け取ります
作成方法は、
- messagesのインポート
- メッセージの作成:「messages.タグ名(request, メッセージ文)」
という2ステップです
受け取り・表示方法は、
- {{ messages }}で受け取り
- forループで展開する
となります
実際に見てみないとわかりにくいと思います
次章をご覧ください
【実例】アクセス制限クラスでエラーメッセージ
日報アプリにおいての一例です
アクセス制限クラスでは、自身の日報のみ編集、削除ページへアクセスが許されています
自身の日報でなく、詳細ページへリダイレクトした際に表示される「message」を作成します
【メッセージの作成】views.py
from django.contrib import messages
class OwnerOnly(UserPassesTestMixin):
def test_func(self):
#...
def handle_no_permission(self):
messages.error(self.request, "ご自身の日報でのみ編集・削除可能です。")
return redirect("nippo-detail", pk=self.kwargs["pk"])
【解説】
インポートは、
from django.contrib import messages
メッセージの作成方法は、
messages.error(self.request, “メッセージ文”)
となります
タグ名は「error」以外に、「info」「success」「warning」がよく使われます
場面で使い分けましょう!
【メッセージの受け取り・表示】base.html
{% if messages %}
<div>
{% for message in messages %}
{% if message.tags == "error" %}
<div class="alert alert-danger alert-dismissible fade show" role="alert">
{% else %}
<div class="alert alert-{{message.tags}} alert-dismissible fade show" role="alert">
{% endif %}
{{message}}
<button type="button" class="btn-close" data-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
</div>
{% endif %}
【解説】
メッセージの受け取りは「messages」ですが、このままでは表示できません
{% for message in messages %}{% endfor %}とforループ内で処理します
forループ内で、
- {{ message }}で、メッセージ文
- {{ message.tags }}で、「error」などのタグ名
とすると、表示されます
<div class="alert alert-{{message.tags}} alert-dismissible fade show" role="alert">
Bootstrapのクラス名と組み合わせて、タグ名に合わせて色を変更するように記述しています
まとめ
Djangoフレームワークには、メッセージ機能が備わっており、使いこなすべき便利な機能です
作成方法は、
- messagesのインポート
- メッセージの作成:「messages.タグ名(request, メッセージ文)」
表示方法は、
- {{ messages }}で受け取り
- forループで展開する
となることを覚えておきましょう!
さて、次回は、独自で作成したテンプレートフィルタで、ユーザー名もしくは「ゲスト」という文字列をナビゲーションバーで表示する方法を解説していきます
当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
という方は必見です!
