【Djangoメッセージフーレムワーク】初学者の方へ 書き方と実例

Django

(最終更新月: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',
            ],
            #...,
        },
    },
]

確認したい変数は、

  1. INSTALLED_APPS
  2. MIDDLEWARE
  3. TEMPLATES

の3つです

メッセージフレームワークの使い方

メッセージフレームワークは、ビュークラス(関数)で作成し、HTMLテンプレートで受け取ります

作成方法は、

  1. messagesのインポート
  2. メッセージの作成:「messages.タグ名(request, メッセージ文)

という2ステップです

受け取り・表示方法は、

  1. {{ messages }}で受け取り
  2. 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フレームワークには、メッセージ機能が備わっており、使いこなすべき便利な機能です

作成方法は、

  1. messagesのインポート
  2. メッセージの作成:「messages.タグ名(request, メッセージ文)

表示方法は、

  1. {{ messages }}で受け取り
  2. forループで展開する

となることを覚えておきましょう!

さて、次回は、独自で作成したテンプレートフィルタで、ユーザー名もしくは「ゲスト」という文字列をナビゲーションバーで表示する方法を解説していきます

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

関連書籍

タイトルとURLをコピーしました