{"title":"メッセージフレームワーク","version":"3.2","locale":"ja","docname":"ref/contrib/messages","url":"/ja/3.2/ref/contrib/messages/","canonical":"https://djangodocs.dev/ja/3.2/ref/contrib/messages/","summary":"Web アプリケーションでは非常に一般的に、フォームやその他のユーザーインプットのプロセスの後、ユーザーに向けて一過性の通知メッセージ (\"フラッシュメッセージ\" とも言われます) を表示する必要があります。 Django は、anonymous および認証済みユーザーの両方に対して、Cookie…","html":"<span id=\"the-messages-framework\"></span><h1>メッセージフレームワーク<a class=\"heading-anchor\" href=\"#module-django.contrib.messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Web アプリケーションでは非常に一般的に、フォームやその他のユーザーインプットのプロセスの後、ユーザーに向けて一過性の通知メッセージ (&quot;フラッシュメッセージ&quot; とも言われます) を表示する必要があります。</p>\n<p>Django は、anonymous および認証済みユーザーの両方に対して、Cookie とセッションをベースにしたメッセージングを完全にサポートしています。このメッセージフレームワークは、一時的に一つのリクエスト内にメッセージを保管し、その後のリクエスト (通常、直後のリクエスト) 内で表示するために、これらを検索することを可能にします。全てのメッセージは、優先順位 (例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">info</span></code>、 <code class=\"docutils literal notranslate\"><span class=\"pre\">warning</span></code>、ないし <code class=\"docutils literal notranslate\"><span class=\"pre\">error</span></code>) を決定づける特定の <code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code> でタグづけされます。</p>\n<section id=\"enabling-messages\">\n<h2>メッセージを有効にする<a class=\"heading-anchor\" href=\"#enabling-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>メッセージは、 <a class=\"reference internal\" href=\"/ja/3.2/ref/middleware/\"><span class=\"doc\">ミドルウェア</span></a> クラスと、それに対応する <a class=\"reference internal\" href=\"/ja/3.2/ref/templates/api/\"><span class=\"doc\">コンテクストプロセッサー</span></a> を通して実行されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code> によって生成されたデフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> は、メッセージ機能を有効にするために必要な設定を全て含んでいます:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> は、<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> の中にあります。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions.middleware.SessionMiddleware'</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.middleware.MessageMiddleware'</span></code> を含みます。</p>\n<p>デフォルトの <a class=\"reference internal\" href=\"#message-storage-backends\"><span class=\"std std-ref\">storage backend</span></a> は <a class=\"reference internal\" href=\"/ja/3.2/topics/http/sessions/\"><span class=\"doc\">sessions</span></a> に依存します。そのため <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> を有効にして、 <a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 内で <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> より前に記述する必要があります。</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> 設定で定義した <code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code> バックエンドの <code class=\"docutils literal notranslate\"><span class=\"pre\">'context_processors'</span></code> オプションは、<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.context_processors.messages'</span></code> を含みます。</p></li>\n</ul>\n<p>メッセージを使いたくない場合は、<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> から <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> を、<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> から <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> 行を、そして <a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> から <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> コンテクストプロセッサーを削除できます。</p>\n</section>\n<section id=\"configuring-the-message-engine\">\n<h2>メッセージエンジンを設定する<a class=\"heading-anchor\" href=\"#configuring-the-message-engine\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"storage-backends\">\n<span id=\"message-storage-backends\"></span><h3>ストレージバックエンド<a class=\"heading-anchor\" href=\"#storage-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージフレームワークは、一時的なメッセージを保管するために、異なるバックエンドを使うことができます。</p>\n<p>Django は、<a class=\"reference internal\" href=\"#module-django.contrib.messages\" title=\"django.contrib.messages: Provides cookie- and session-based temporary message storage.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.messages</span></code></a> の中で、以下の3つのビルトインのストレージクラスを提供しています:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.session.SessionStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.session.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SessionStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.session.SessionStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクラスは、すべてのメッセージをリクエストのセッション内部に保管します。ゆえに、Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code> アプリケーションが必要となります。</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.cookie.CookieStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.cookie.</span></span><span class=\"sig-name descname\"><span class=\"pre\">CookieStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.cookie.CookieStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクラスは、複数のリクエストにわたって通知を保持するために、Cookie (改ざんを防ぐため秘密のハッシュで署名されます) にメッセージデータを保管します。古いメッセージは Cookie データのサイズが 2048 バイトを超えると破棄されます。</p>\n<aside class=\"version-note version-changed\" data-version=\"3.2\">\n<p class=\"version-note-title\">Changed in Django 3.2</p><p>Messages format was changed to the <span class=\"target\" id=\"index-0\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc6265.html\"><strong>RFC 6265</strong></a> compliant format.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.fallback.FallbackStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.fallback.</span></span><span class=\"sig-name descname\"><span class=\"pre\">FallbackStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.fallback.FallbackStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクラスは、まず <code class=\"docutils literal notranslate\"><span class=\"pre\">CookieStorage</span></code> を使い、単一の Cookie に合わないメッセージに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStorage</span></code> を使います。Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code> アプリケーションも必要となります。</p>\n<p>この動作は、可能な限りセッションへの書き込みを避けます。一般的なケースでは最高のパフォーマンスを提供するはずです。</p>\n</dd></dl>\n\n<p><a class=\"reference internal\" href=\"#django.contrib.messages.storage.fallback.FallbackStorage\" title=\"django.contrib.messages.storage.fallback.FallbackStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FallbackStorage</span></code></a> はデフォルトのストレージクラスです。もしあなたのニーズに合わないときは、 <a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_STORAGE</span></code></a> を完全な import パスに設定することで他のストレージクラスを選べます。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">MESSAGE_STORAGE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;django.contrib.messages.storage.cookie.CookieStorage&#39;</span>\n</code></pre></div>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.base.BaseStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.base.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.base.BaseStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>独自のストレージクラスに書き込むためには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.storage.base</span></code> 内の <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseStorage</span></code> クラスをサブクラス化して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">_get</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">_store</span></code> メソッドを実装してください。</p>\n</section>\n<section id=\"message-levels\">\n<span id=\"message-level\"></span><h3>メッセージレベル<a class=\"heading-anchor\" href=\"#message-levels\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージフレームワークは、Python ロギングモジュールに似た、設定可能なレベルアーキテクチャに基づきます。メッセージレベルは、タイプによるグループメッセージを可能にします。これにより、ビューやテンプレートの中で異なるフィルターおよび表示ができるようになります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages</span></code> から直接インポートできるビルトインのレベルは以下の通りです:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>定数</p></th>\n<th class=\"head\"><p>目的</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></p></td>\n<td><p>プロダクション環境では無視 (ないし削除) される、開発に関連したメッセージ</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code></p></td>\n<td><p>ユーザーに何か情報を伝えるメッセージ</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">SUCCESS</span></code></p></td>\n<td><p>あるアクションが成功した、例えば &quot;あなたのプロフィールは無事に更新されました&quot;</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code></p></td>\n<td><p>問題は起きなかったが、問題になり得る</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code></p></td>\n<td><p>あるアクションが成功 <strong>しなかった</strong> か、他の問題が発生した</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_LEVEL</span></code></a> 設定は、最小限の記録されたレベルを変更するため (もしくは <a class=\"reference internal\" href=\"#changing-the-minimum-recorded-level-per-request\">リクエストごとに変更</a> するため)に使うことができます。これ以下のレベルのメッセージを追加しようとしても無視されます。</p>\n</section>\n<section id=\"message-tags\">\n<h3>メッセージタグ<a class=\"heading-anchor\" href=\"#message-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージタグは、メッセージレベルの表現文字列に加えて、ビューの中で直接付与される追加のタグです (詳しくは、以下の <a class=\"reference internal\" href=\"#adding-extra-message-tags\">追加のメッセージタグを付与する</a> をご覧ください )。タグは文字列で保管され、スペースによって区切られます。典型的には、メッセージタグは、メッセージタイプに基いてメッセージのスタイルをカスタマイズするために、CSS のクラスとして利用されます。デフォルトでは、それぞれのレベルは、レベル定数を小文字にした、単一のタグを持っています。</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>レベル定数</p></th>\n<th class=\"head\"><p>タグ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">debug</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">info</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">SUCCESS</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">success</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">warning</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">error</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>メッセージレベル (ビルトインないしカスタムのいずれか) のデフォルトのタグを変更するためには、 <a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> 設定を、あなたが変更したいと思うレベルを含むディクショナリにセットしてください。これでデフォルトのタグを拡張するので、あなたがすべきことはオーバーライドしようとするレベルに対してタグを提供することだけです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.messages</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">constants</span> <span class=\"k\">as</span> <span class=\"n\">messages</span>\n<span class=\"n\">MESSAGE_TAGS</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">INFO</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n    <span class=\"mi\">50</span><span class=\"p\">:</span> <span class=\"s1\">&#39;critical&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"using-messages-in-views-and-templates\">\n<h2>ビューとテンプレートでメッセージを使う<a class=\"heading-anchor\" href=\"#using-messages-in-views-and-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.add_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">add_message</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">level</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_tags</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fail_silently</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.add_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"adding-a-message\">\n<h3>メッセージを付与する<a class=\"heading-anchor\" href=\"#adding-a-message\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージを付与するには、以下を呼び出してください:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">messages</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">add_message</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">INFO</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello world.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>いくつかのショートカットメソッドは、一般的に使われるタグ (通常、メッセージのHTMLクラスとして表されます) とともにメッセージを付与する標準的な方法を提供します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">debug</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> SQL statements were executed.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">count</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Three credits remain in your account.&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Profile details updated.&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your account expires in three days.&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Document deleted.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"displaying-messages\">\n<span id=\"message-displaying\"></span><h3>メッセージを表示する<a class=\"heading-anchor\" href=\"#displaying-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.get_messages\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_messages</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.get_messages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><strong>あなたのテンプレート内で</strong>、以下のようなものを使ってください:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">messages</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;</span><span class=\"n\">ul</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;messages&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">message</span> <span class=\"ow\">in</span> <span class=\"n\">messages</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span><span class=\"n\">li</span><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">tags</span> <span class=\"o\">%</span><span class=\"p\">}</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;{{ message.tags }}&quot;</span><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span><span class=\"o\">&gt;</span><span class=\"p\">{{</span> <span class=\"n\">message</span> <span class=\"p\">}}</span><span class=\"o\">&lt;/</span><span class=\"n\">li</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;/</span><span class=\"n\">ul</span><span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>コンテクストプロセッサーを使っている場合、テンプレートは <code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code> でレンダリングされる必要があります。もしくは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> をテンプレートコンテクストに対して有効にしてください。</p>\n<p>Even if you know there is only one message, you should still iterate over the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> sequence, because otherwise the message storage will not be\ncleared for the next request.</p>\n<p>コンテクストプロセッサーは、メッセージレベルの名前と数値を対応させた <code class=\"docutils literal notranslate\"><span class=\"pre\">DEFAULT_MESSAGE_LEVELS</span></code> 変数も提供します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">messages</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;</span><span class=\"n\">ul</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;messages&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> <span class=\"n\">message</span> <span class=\"ow\">in</span> <span class=\"n\">messages</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span><span class=\"n\">li</span><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">tags</span> <span class=\"o\">%</span><span class=\"p\">}</span> <span class=\"n\">class</span><span class=\"o\">=</span><span class=\"s2\">&quot;{{ message.tags }}&quot;</span><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span><span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">level</span> <span class=\"o\">==</span> <span class=\"n\">DEFAULT_MESSAGE_LEVELS</span><span class=\"o\">.</span><span class=\"n\">ERROR</span> <span class=\"o\">%</span><span class=\"p\">}</span><span class=\"n\">Important</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n        <span class=\"p\">{{</span> <span class=\"n\">message</span> <span class=\"p\">}}</span>\n    <span class=\"o\">&lt;/</span><span class=\"n\">li</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endfor</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;/</span><span class=\"n\">ul</span><span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endif</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p><strong>テンプレート以外では</strong>、 <a class=\"reference internal\" href=\"#django.contrib.messages.get_messages\" title=\"django.contrib.messages.get_messages\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_messages()</span></code></a> を使うことができます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.messages</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_messages</span>\n\n<span class=\"n\">storage</span> <span class=\"o\">=</span> <span class=\"n\">get_messages</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">message</span> <span class=\"ow\">in</span> <span class=\"n\">storage</span><span class=\"p\">:</span>\n    <span class=\"n\">do_something_with_the_message</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>例えば、 すべてのメッセージを取得して、<a class=\"reference internal\" href=\"/ja/3.2/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin\" title=\"django.views.generic.base.TemplateResponseMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponseMixin</span></code></a> の代わりに <a class=\"reference internal\" href=\"/ja/3.2/topics/class-based-views/mixins/#jsonresponsemixin-example\"><span class=\"std std-ref\">JSONResponseMixin</span></a> の中にreturnすることができます。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.messages.get_messages\" title=\"django.contrib.messages.get_messages\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_messages()</span></code></a> は設定されたストレージバックエンドのインスタンスを返します。</p>\n</section>\n<section id=\"the-message-class\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Message</span></code> クラス<a class=\"heading-anchor\" href=\"#the-message-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.base.Message\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.base.</span></span><span class=\"sig-name descname\"><span class=\"pre\">Message</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.base.Message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When you loop over the list of messages in a template, what you get are\ninstances of the <code class=\"docutils literal notranslate\"><span class=\"pre\">Message</span></code> class. They have only a few attributes:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>: メッセージの実際のテキストです。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code>: メッセージのタイプを説明する数値です (詳細は上述の <a class=\"reference internal\" href=\"#message-levels\">message levels</a> セクション)。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tags</span></code>: スペースによって区切られた、全てのメッセージのタグを結合する文字列 (<code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>) です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code>: スペースによって区切られた、メッセージのカスタムタグを含む文字列です。空がデフォルトです。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>: レベルを表す文字列です。デフォルトでは定数名の小文字バージョンですが、<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> 設定によって変更することができます。</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"creating-custom-message-levels\">\n<h3>独自のメッセージレベルを作成する<a class=\"heading-anchor\" href=\"#creating-custom-message-levels\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージレベルは実際には単なる整数なので、独自のレベル定数を定義して、よりカスタマイズされたユーザーフィードバックを作成することができます。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">CRITICAL</span> <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">add_message</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">CRITICAL</span><span class=\"p\">,</span> <span class=\"s1\">&#39;A serious error occurred.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>独自のメッセージレベルを作成するときには、既存のレベルを上書きしないように気をつけてください。ビルトインのレベルで使われている値は以下の通りです:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\" id=\"message-level-constants\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>レベル定数</p></th>\n<th class=\"head\"><p>値</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></p></td>\n<td><p>10</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code></p></td>\n<td><p>20</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">SUCCESS</span></code></p></td>\n<td><p>25</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code></p></td>\n<td><p>30</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code></p></td>\n<td><p>40</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>HTML や CSS の中で独自のレベルを指定する必要がある場合は、<a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> 設定を通してマップを提供する必要があります。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>再利用可能なアプリケーションを作成している場合には、ビルトインの <a class=\"reference internal\" href=\"#message-levels\">message levels</a> だけを使い、独自のレベルに依存しないことが推奨されます。</p>\n</aside>\n</section>\n<section id=\"changing-the-minimum-recorded-level-per-request\">\n<h3>Changing the minimum recorded level per-request<a class=\"heading-anchor\" href=\"#changing-the-minimum-recorded-level-per-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The minimum recorded level can be set per request via the <code class=\"docutils literal notranslate\"><span class=\"pre\">set_level</span></code>\nmethod:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">messages</span>\n\n<span class=\"c1\"># Change the messages level to ensure the debug message is added.</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">set_level</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">debug</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Test message...&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># In another request, record only messages with a level of WARNING and higher</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">set_level</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">WARNING</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your profile was updated.&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># ignored</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your account is about to expire.&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># recorded</span>\n\n<span class=\"c1\"># Set the messages level back to default.</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">set_level</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Similarly, the current effective level can be retrieved with <code class=\"docutils literal notranslate\"><span class=\"pre\">get_level</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">messages</span>\n<span class=\"n\">current_level</span> <span class=\"o\">=</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">get_level</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For more information on how the minimum recorded level functions, see\n<a class=\"reference internal\" href=\"#message-levels\">Message levels</a> above.</p>\n</section>\n<section id=\"adding-extra-message-tags\">\n<h3>Adding extra message tags<a class=\"heading-anchor\" href=\"#adding-extra-message-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>For more direct control over message tags, you can optionally provide a string\ncontaining extra tags to any of the add methods:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">add_message</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">INFO</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Over 9000!&#39;</span><span class=\"p\">,</span> <span class=\"n\">extra_tags</span><span class=\"o\">=</span><span class=\"s1\">&#39;dragonball&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Email box full&#39;</span><span class=\"p\">,</span> <span class=\"n\">extra_tags</span><span class=\"o\">=</span><span class=\"s1\">&#39;email&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Extra tags are added before the default tag for that level and are space\nseparated.</p>\n</section>\n<section id=\"failing-silently-when-the-message-framework-is-disabled\">\n<h3>Failing silently when the message framework is disabled<a class=\"heading-anchor\" href=\"#failing-silently-when-the-message-framework-is-disabled\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you're writing a reusable app (or other piece of code) and want to include\nmessaging functionality, but don't want to require your users to enable it\nif they don't want to, you may pass an additional keyword argument\n<code class=\"docutils literal notranslate\"><span class=\"pre\">fail_silently=True</span></code> to any of the <code class=\"docutils literal notranslate\"><span class=\"pre\">add_message</span></code> family of methods. For\nexample:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">add_message</span><span class=\"p\">(</span>\n    <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">SUCCESS</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Profile details updated.&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello world.&#39;</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Setting <code class=\"docutils literal notranslate\"><span class=\"pre\">fail_silently=True</span></code> only hides the <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageFailure</span></code> that would\notherwise occur when the messages framework disabled and one attempts to\nuse one of the <code class=\"docutils literal notranslate\"><span class=\"pre\">add_message</span></code> family of methods. It does not hide failures\nthat may occur for other reasons.</p>\n</aside>\n</section>\n<section id=\"adding-messages-in-class-based-views\">\n<h3>Adding messages in class-based views<a class=\"heading-anchor\" href=\"#adding-messages-in-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.views.SuccessMessageMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">views.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SuccessMessageMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.views.SuccessMessageMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Adds a success message attribute to\n<a class=\"reference internal\" href=\"/ja/3.2/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView\" title=\"django.views.generic.edit.FormView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FormView</span></code></a> based classes</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.views.SuccessMessageMixin.get_success_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_success_message</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">cleaned_data</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.views.SuccessMessageMixin.get_success_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> is the cleaned data from the form which is used for\nstring formatting</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><strong>Example views.py</strong>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.messages.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SuccessMessageMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.edit</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CreateView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorCreateView</span><span class=\"p\">(</span><span class=\"n\">SuccessMessageMixin</span><span class=\"p\">,</span> <span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Author</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/success/&#39;</span>\n    <span class=\"n\">success_message</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(name)s</span><span class=\"s2\"> was created successfully&quot;</span>\n</code></pre></div>\n<p>The cleaned data from the <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> is available for string interpolation using\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">%(field_name)s</span></code> syntax. For ModelForms, if you need access to fields\nfrom the saved <code class=\"docutils literal notranslate\"><span class=\"pre\">object</span></code> override the\n<a class=\"reference internal\" href=\"#django.contrib.messages.views.SuccessMessageMixin.get_success_message\" title=\"django.contrib.messages.views.SuccessMessageMixin.get_success_message\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_success_message()</span></code></a>\nmethod.</p>\n<p><strong>Example views.py for ModelForms</strong>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.messages.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SuccessMessageMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.edit</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CreateView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ComplicatedModel</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ComplicatedCreateView</span><span class=\"p\">(</span><span class=\"n\">SuccessMessageMixin</span><span class=\"p\">,</span> <span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">ComplicatedModel</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/success/&#39;</span>\n    <span class=\"n\">success_message</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(calculated_field)s</span><span class=\"s2\"> was created successfully&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_success_message</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cleaned_data</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">success_message</span> <span class=\"o\">%</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n            <span class=\"n\">cleaned_data</span><span class=\"p\">,</span>\n            <span class=\"n\">calculated_field</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">object</span><span class=\"o\">.</span><span class=\"n\">calculated_field</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"expiration-of-messages\">\n<h2>Expiration of messages<a class=\"heading-anchor\" href=\"#expiration-of-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The messages are marked to be cleared when the storage instance is iterated\n(and cleared when the response is processed).</p>\n<p>To avoid the messages being cleared, you can set the messages storage to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> after iterating:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">storage</span> <span class=\"o\">=</span> <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">get_messages</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">message</span> <span class=\"ow\">in</span> <span class=\"n\">storage</span><span class=\"p\">:</span>\n    <span class=\"n\">do_something_with</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">)</span>\n<span class=\"n\">storage</span><span class=\"o\">.</span><span class=\"n\">used</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n</section>\n<section id=\"behavior-of-parallel-requests\">\n<h2>Behavior of parallel requests<a class=\"heading-anchor\" href=\"#behavior-of-parallel-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Due to the way cookies (and hence sessions) work, <strong>the behavior of any\nbackends that make use of cookies or sessions is undefined when the same\nclient makes multiple requests that set or get messages in parallel</strong>. For\nexample, if a client initiates a request that creates a message in one window\n(or tab) and then another that fetches any uniterated messages in another\nwindow, before the first window redirects, the message may appear in the\nsecond window instead of the first window where it may be expected.</p>\n<p>In short, when multiple simultaneous requests from the same client are\ninvolved, messages are not guaranteed to be delivered to the same window that\ncreated them nor, in some cases, at all. Note that this is typically not a\nproblem in most applications and will become a non-issue in HTML5, where each\nwindow/tab will have its own browsing context.</p>\n</section>\n<section id=\"settings\">\n<h2>設定<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A few <a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#settings-messages\"><span class=\"std std-ref\">settings</span></a> give you control over message\nbehavior:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_LEVEL</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_STORAGE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a></p></li>\n</ul>\n<p>For backends that use cookies, the settings for the cookie are taken from\nthe session cookie settings:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-SESSION_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_DOMAIN</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SECURE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/3.2/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_HTTPONLY</span></code></a></p></li>\n</ul>\n</section>","rootId":"module-django.contrib.messages","toc":[{"title":"メッセージを有効にする","anchor":"enabling-messages","children":[]},{"title":"メッセージエンジンを設定する","anchor":"configuring-the-message-engine","children":[{"title":"ストレージバックエンド","anchor":"storage-backends","children":[]},{"title":"メッセージレベル","anchor":"message-levels","children":[]},{"title":"メッセージタグ","anchor":"message-tags","children":[]}]},{"title":"ビューとテンプレートでメッセージを使う","anchor":"using-messages-in-views-and-templates","children":[{"title":"メッセージを付与する","anchor":"adding-a-message","children":[]},{"title":"メッセージを表示する","anchor":"displaying-messages","children":[]},{"title":"Message クラス","anchor":"the-message-class","children":[]},{"title":"独自のメッセージレベルを作成する","anchor":"creating-custom-message-levels","children":[]},{"title":"Changing the minimum recorded level per-request","anchor":"changing-the-minimum-recorded-level-per-request","children":[]},{"title":"Adding extra message tags","anchor":"adding-extra-message-tags","children":[]},{"title":"Failing silently when the message framework is disabled","anchor":"failing-silently-when-the-message-framework-is-disabled","children":[]},{"title":"Adding messages in class-based views","anchor":"adding-messages-in-class-based-views","children":[]}]},{"title":"Expiration of messages","anchor":"expiration-of-messages","children":[]},{"title":"Behavior of parallel requests","anchor":"behavior-of-parallel-requests","children":[]},{"title":"設定","anchor":"settings","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/ja/3.2/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/3.2/ref/contrib/"}],"prev":{"docname":"ref/contrib/humanize","title":"django.contrib.humanize","url":"/ja/3.2/ref/contrib/humanize/"},"next":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/ja/3.2/ref/contrib/postgres/"},"formats":{"html":"/ja/3.2/ref/contrib/messages/","markdown":"/ja/3.2/ref/contrib/messages.md","json":"/ja/3.2/ref/contrib/messages.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/ref/contrib/messages.txt","official":"https://docs.djangoproject.com/ja/3.2/ref/contrib/messages/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}