{"title":"Ramverket för meddelanden","version":"6.1","locale":"sv","docname":"ref/contrib/messages","url":"/sv/6.1/ref/contrib/messages/","canonical":"https://djangodocs.dev/sv/6.1/ref/contrib/messages/","summary":"I webbapplikationer är det vanligt att du behöver visa ett engångsmeddelande (även kallat ”flashmeddelande”) till användaren efter att ha bearbetat ett formulär…","html":"<span id=\"the-messages-framework\"></span><h1>Ramverket för meddelanden<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>I webbapplikationer är det vanligt att du behöver visa ett engångsmeddelande (även kallat ”flashmeddelande”) till användaren efter att ha bearbetat ett formulär eller någon annan typ av användarinmatning.</p>\n<p>För detta ger Django fullt stöd för cookie- och sessionsbaserad meddelandehantering, för både anonyma och autentiserade användare. Med meddelanderamen kan du tillfälligt lagra meddelanden i en begäran och hämta dem för visning i en efterföljande begäran (vanligtvis nästa). Varje meddelande är taggat med en specifik ”nivå” som bestämmer dess prioritet (t.ex. ”info”, ”varning” eller ”fel”).</p>\n<section id=\"enabling-messages\">\n<h2>Aktivering av meddelanden<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>Meddelanden implementeras genom en <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/\"><span class=\"doc\">middleware</span></a>-klass och motsvarande <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/api/\"><span class=\"doc\">context processor</span></a>.</p>\n<p>Standardinställningen <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> som skapats av <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code> innehåller redan alla inställningar som krävs för att aktivera meddelandefunktionen:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> finns i <a class=\"reference internal\" href=\"/sv/6.1/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=\"/sv/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions.middleware.SessionMiddleware'</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.middleware.MessageMiddleware'</span></code>.</p>\n<p>Standard <a class=\"reference internal\" href=\"#message-storage-backends\"><span class=\"std std-ref\">storage backend</span></a> förlitar sig på <a class=\"reference internal\" href=\"/sv/6.1/topics/http/sessions/\"><span class=\"doc\">sessions</span></a>. Det är därför <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> måste vara aktiverat och visas före <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a>.</p>\n</li>\n<li><p>Alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">'context_processors'</span></code> för backend <code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code> som definieras i din <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a>-inställning innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.context_processors.messages'</span></code>.</p></li>\n</ul>\n<p>Om du inte vill använda meddelanden kan du ta bort <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> från din <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, raden <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> från <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> och kontextprocessorn <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> från <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a>.</p>\n</section>\n<section id=\"configuring-the-message-engine\">\n<h2>Konfigurera meddelandemotorn<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>Backend för lagring<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>Meddelanderamen kan använda olika backends för att lagra tillfälliga meddelanden.</p>\n<p>Django tillhandahåller tre inbyggda lagringsklasser i <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>:</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>Den här klassen lagrar alla meddelanden i begäran om session. Därför kräver den Djangos <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code> applikation.</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>Denna klass lagrar meddelandedata i en cookie (signerad med en hemlig hash för att förhindra manipulation) för att hålla kvar meddelanden över förfrågningar. Gamla meddelanden tas bort om cookiedatastorleken skulle överstiga 2048 byte.</p>\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>Denna klass använder först <code class=\"docutils literal notranslate\"><span class=\"pre\">CookieStorage</span></code>, och faller tillbaka till att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStorage</span></code> för de meddelanden som inte kunde rymmas i en enda cookie. Den kräver också Djangos applikation <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code>.</p>\n<p>Detta beteende undviker att skriva till sessionen när det är möjligt. Det bör ge bäst prestanda i det allmänna fallet.</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> är standardlagringsklassen. Om den inte är lämplig för dina behov kan du välja en annan lagringsklass genom att ange <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_STORAGE</span></code></a> till dess fullständiga importsökväg, till exempel:</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=\"s2\">&quot;django.contrib.messages.storage.cookie.CookieStorage&quot;</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>För att skriva din egen lagringsklass, subklassa klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseStorage</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.storage.base</span></code> och implementera metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">_get</span></code> och <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>Meddelandenivåer<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>Meddelanderamen bygger på en konfigurerbar nivåarkitektur som liknar den i Pythons loggmodul. Med meddelandenivåer kan du gruppera meddelanden efter typ så att de kan filtreras eller visas på olika sätt i vyer och mallar.</p>\n<p>De inbyggda nivåerna, som kan importeras direkt från <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages</span></code>, är:</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>Konstant</p></th>\n<th class=\"head\"><p>Syfte</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>Utvecklingsrelaterade meddelanden som kommer att ignoreras (eller tas bort) i en produktionsdistribution</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>Informationsmeddelanden för användaren</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>En åtgärd lyckades, t.ex. ”Din profil uppdaterades framgångsrikt”</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>”VARNING</p></td>\n<td><p>Ett fel inträffade inte men kan vara nära förestående</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>En åtgärd lyckades <strong>inte</strong> eller något annat fel inträffade</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_LEVEL</span></code></a> kan användas för att ändra den lägsta inspelade nivån (eller så kan den <a class=\"reference internal\" href=\"#changing-the-minimum-recorded-level-per-request\">ändras på begäran</a>). Försök att lägga till meddelanden på en lägre nivå än denna ignoreras.</p>\n</section>\n<section id=\"message-tags\">\n<h3>Taggar för meddelanden<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>Meddelandetaggar är en strängrepresentation av meddelandenivån plus eventuella extra taggar som har lagts till direkt i vyn (se ”Lägga till extra meddelandetaggar” nedan för mer information). Taggarna lagras i en sträng och separeras med mellanslag. Meddelandetaggar används vanligtvis som CSS-klasser för att anpassa meddelandestilen baserat på meddelandetyp. Som standard har varje nivå en enda tagg som är en gemen version av sin egen konstant:</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>Nivå Konstant</p></th>\n<th class=\"head\"><p>Tagg</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\">framgång</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>”VARNING</p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">varning</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\">fel</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Om du vill ändra standardtaggarna för en meddelandenivå (antingen inbyggd eller anpassad) anger du inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> till en ordbok som innehåller de nivåer du vill ändra. Eftersom detta utökar standardtaggarna behöver du bara ange taggar för de nivåer som du vill åsidosätta:</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\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=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"mi\">50</span><span class=\"p\">:</span> <span class=\"s2\">&quot;critical&quot;</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>Använda meddelanden i vyer och mallar<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>Lägga till ett meddelande<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>För att lägga till ett meddelande, ring:</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=\"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=\"s2\">&quot;Hello world.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Vissa genvägsmetoder ger ett standardiserat sätt att lägga till meddelanden med vanligt förekommande taggar (som vanligtvis representeras som HTML-klasser för meddelandet):</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=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> SQL statements were executed.&quot;</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=\"s2\">&quot;Three credits remain in your account.&quot;</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=\"s2\">&quot;Profile details updated.&quot;</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=\"s2\">&quot;Your account expires in three days.&quot;</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=\"s2\">&quot;Document deleted.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"displaying-messages\">\n<span id=\"message-displaying\"></span><h3>Visning av meddelanden<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>I din mall</strong>, använd något liknande:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">messages</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;messages&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">message</span> <span class=\"k\">in</span> <span class=\"nv\">messages</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">message.tags</span> <span class=\"cp\">%}</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">message.tags</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">message</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Om du använder kontextprocessorn bör din mall återges med en <code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code>. Annars ska du se till att <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> är tillgängligt för mallkontexten.</p>\n<p>Även om du vet att det bara finns ett meddelande bör du ändå iterera över sekvensen <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code>, eftersom meddelandelagret annars inte kommer att rensas för nästa begäran.</p>\n<p>Kontextprocessorn tillhandahåller också variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">DEFAULT_MESSAGE_LEVELS</span></code> som är en mappning av meddelandenivåernas namn till deras numeriska värde:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">messages</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;messages&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">message</span> <span class=\"k\">in</span> <span class=\"nv\">messages</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">message.tags</span> <span class=\"cp\">%}</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">message.tags</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">message.level</span> <span class=\"o\">==</span> <span class=\"nv\">DEFAULT_MESSAGE_LEVELS.ERROR</span> <span class=\"cp\">%}</span>Important: <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">message</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p><strong>Utanför mallar</strong> kan du använda <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>Du kan till exempel hämta alla meddelanden för att returnera dem i en <a class=\"reference internal\" href=\"/sv/6.1/topics/class-based-views/mixins/#jsonresponsemixin-example\"><span class=\"std std-ref\">JSONResponseMixin</span></a> istället för en <a class=\"reference internal\" href=\"/sv/6.1/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>.</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> kommer att returnera en instans av den konfigurerade lagringsbackend.</p>\n</section>\n<section id=\"the-message-class\">\n<h3>Klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Message</span></code> (meddelande)<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.Message\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Message</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.Message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>När man loopar över listan med meddelanden i en mall får man fram instanser av klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Message</span></code>. De har bara ett fåtal attribut:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">meddelande</span></code>: Den faktiska texten i meddelandet.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">nivå</span></code>: Ett heltal som beskriver typen av meddelande (se avsnittet meddelandenivåer ovan).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tags</span></code>: En sträng som kombinerar alla meddelandets taggar (<code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>) separerade med mellanslag.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code>: En sträng som innehåller anpassade taggar för detta meddelande, separerade med mellanslag. Den är tom som standard.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>: Strängrepresentationen av nivån. Som standard är det den gemena versionen av namnet på den associerade konstanten, men detta kan ändras om du behöver genom att använda inställningen <a class=\"reference internal\" href=\"/sv/6.1/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>Skapa anpassade meddelandenivåer<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>Meddelandenivåerna är inget annat än heltal, så du kan definiera dina egna nivåkonstanter och använda dem för att skapa mer anpassad användaråterkoppling, t.ex:</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\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=\"s2\">&quot;A serious error occurred.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>När du skapar egna meddelandenivåer bör du vara försiktig så att du inte överbelastar befintliga nivåer. Värdena för de inbyggda nivåerna är:</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>Nivå Konstant</p></th>\n<th class=\"head\"><p>Värde</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>”VARNING</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>Om du behöver identifiera de anpassade nivåerna i din HTML eller CSS måste du tillhandahålla en mappning via inställningen <a class=\"reference internal\" href=\"/sv/6.1/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\">Observera</p>\n<p>Om du skapar en återanvändbar applikation rekommenderas att du endast använder de inbyggda <a class=\"reference internal\" href=\"#message-levels\">message levels</a> och inte förlitar dig på några anpassade nivåer.</p>\n</aside>\n</section>\n<section id=\"changing-the-minimum-recorded-level-per-request\">\n<h3>Ändring av lägsta inspelade nivå per förfrågan<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>Den lägsta registrerade nivån kan ställas in per begäran via metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">set_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\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=\"s2\">&quot;Test message...&quot;</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=\"s2\">&quot;Your profile was updated.&quot;</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=\"s2\">&quot;Your account is about to expire.&quot;</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>På samma sätt kan den aktuella effektiva nivån hämtas med <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\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>För mer information om hur den lägsta inspelningsnivån fungerar, se <a class=\"reference internal\" href=\"#message-levels\">Meddelandenivåer</a> ovan.</p>\n</section>\n<section id=\"adding-extra-message-tags\">\n<h3>Lägga till extra meddelandetaggar<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>Om du vill ha mer direkt kontroll över meddelandetaggar kan du ange en sträng med extra taggar till någon av add-metoderna:</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=\"s2\">&quot;Over 9000!&quot;</span><span class=\"p\">,</span> <span class=\"n\">extra_tags</span><span class=\"o\">=</span><span class=\"s2\">&quot;dragonball&quot;</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=\"s2\">&quot;Email box full&quot;</span><span class=\"p\">,</span> <span class=\"n\">extra_tags</span><span class=\"o\">=</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Extra taggar läggs till före standardtaggen för den aktuella nivån och är mellanslagsseparerade.</p>\n</section>\n<section id=\"failing-silently-when-the-message-framework-is-disabled\">\n<h3>Misslyckas i tysthet när meddelanderamen är inaktiverad<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>Om du skriver en återanvändbar app (eller annan kod) och vill inkludera meddelandefunktionalitet, men inte vill kräva att dina användare aktiverar det om de inte vill, kan du skicka ett ytterligare nyckelordsargument <code class=\"docutils literal notranslate\"><span class=\"pre\">fail_silently=True</span></code> till någon av metoderna i <code class=\"docutils literal notranslate\"><span class=\"pre\">add_message</span></code>-familjen. Till exempel:</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>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">SUCCESS</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;Profile details updated.&quot;</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=\"s2\">&quot;Hello world.&quot;</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\">Observera</p>\n<p>Om du ställer in <code class=\"docutils literal notranslate\"><span class=\"pre\">fail_silently=True</span></code> döljs bara <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageFailure</span></code> som annars skulle inträffa när meddelanderamen inaktiveras och man försöker använda en av metoderna i <code class=\"docutils literal notranslate\"><span class=\"pre\">add_message</span></code>-familjen. Den döljer inte fel som kan uppstå av andra skäl.</p>\n</aside>\n</section>\n<section id=\"adding-messages-in-class-based-views\">\n<h3>Lägga till meddelanden i klassbaserade vyer<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>Lägger till ett attribut för framgångsmeddelande till <a class=\"reference internal\" href=\"/sv/6.1/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>-baserade klasser</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> är de rensade data från formuläret som används för strängformatering</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><strong>Exempel på 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\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=\"s2\">&quot;/success/&quot;</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>De rensade uppgifterna från <code class=\"docutils literal notranslate\"><span class=\"pre\">formuläret</span></code> är tillgängliga för stränginterpolering med syntaxen <code class=\"docutils literal notranslate\"><span class=\"pre\">%(field_name)s</span></code>. För ModelForms, om du behöver tillgång till fält från det sparade <code class=\"docutils literal notranslate\"><span class=\"pre\">objektet</span></code> åsidosätt metoden <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>.</p>\n<p><strong>Exempel på views.py för 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\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=\"s2\">&quot;/success/&quot;</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>Utgång av meddelanden<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>Meddelandena markeras för att rensas när lagringsinstansen itereras (och rensas när svaret bearbetas).</p>\n<p>För att undvika att meddelandena rensas kan du ställa in meddelandelagringen till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> efter iteration:</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>Beteende för parallella förfrågningar<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>På grund av hur cookies (och därmed sessioner) fungerar, <strong>är beteendet hos alla backends som använder cookies eller sessioner odefinierat när samma klient gör flera begäranden som ställer in eller hämtar meddelanden parallellt</strong>. Om en klient t.ex. initierar en begäran som skapar ett meddelande i ett fönster (eller en flik) och sedan en annan som hämtar alla oitererade meddelanden i ett annat fönster, innan det första fönstret omdirigeras, kan meddelandet visas i det andra fönstret i stället för i det första fönstret där det kan förväntas.</p>\n<p>Kort sagt, när flera samtidiga förfrågningar från samma klient är inblandade, är det inte garanterat att meddelanden levereras till samma fönster som skapade dem eller, i vissa fall, inte alls. Observera att detta normalt inte är ett problem i de flesta tillämpningar och att det kommer att bli ett icke-problem i HTML5, där varje fönster/flik kommer att ha sin egen webbläsarkontext.</p>\n</section>\n<section id=\"settings\">\n<h2>Inställningar<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Några <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#settings-messages\"><span class=\"std std-ref\">inställningar</span></a> ger dig kontroll över meddelandets beteende:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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=\"/sv/6.1/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=\"/sv/6.1/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>För backends som använder cookies hämtas inställningarna för cookien från inställningarna för sessionscookien:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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=\"/sv/6.1/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=\"/sv/6.1/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>\n<section id=\"testing\">\n<h2>Testar<a class=\"heading-anchor\" href=\"#testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Denna modul erbjuder en skräddarsydd testmetod för att testa meddelanden som är kopplade till en <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a>.</p>\n<p>För att dra nytta av denna försäkran, lägg till <code class=\"docutils literal notranslate\"><span class=\"pre\">MessagesTestMixin</span></code> i klasshierarkin:</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.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MessagesTestMixin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MsgTestCase</span><span class=\"p\">(</span><span class=\"n\">MessagesTestMixin</span><span class=\"p\">,</span> <span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Ärv sedan från <code class=\"docutils literal notranslate\"><span class=\"pre\">MsgTestCase</span></code> i dina tester.</p>\n<dl class=\"py method\" id=\"module-django.contrib.messages.test\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.test.MessagesTestMixin.assertMessages\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">MessagesTestMixin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertMessages</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_messages</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ordered</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.test.MessagesTestMixin.assertMessages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säkerställer att <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\">messages</span></code></a> som lagts till i <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">response</span></code></a> matchar <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_messages</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">expected_messages</span></code> är en lista med <a class=\"reference internal\" href=\"#django.contrib.messages.Message\" title=\"django.contrib.messages.Message\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Message</span></code></a>-objekt.</p>\n<p>Som standard är jämförelsen beroende av ordningsföljd. Du kan inaktivera detta genom att ställa in argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">ordered</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n</section>","rootId":"module-django.contrib.messages","toc":[{"title":"Aktivering av meddelanden","anchor":"enabling-messages","children":[]},{"title":"Konfigurera meddelandemotorn","anchor":"configuring-the-message-engine","children":[{"title":"Backend för lagring","anchor":"storage-backends","children":[]},{"title":"Meddelandenivåer","anchor":"message-levels","children":[]},{"title":"Taggar för meddelanden","anchor":"message-tags","children":[]}]},{"title":"Använda meddelanden i vyer och mallar","anchor":"using-messages-in-views-and-templates","children":[{"title":"Lägga till ett meddelande","anchor":"adding-a-message","children":[]},{"title":"Visning av meddelanden","anchor":"displaying-messages","children":[]},{"title":"Klassen Message (meddelande)","anchor":"the-message-class","children":[]},{"title":"Skapa anpassade meddelandenivåer","anchor":"creating-custom-message-levels","children":[]},{"title":"Ändring av lägsta inspelade nivå per förfrågan","anchor":"changing-the-minimum-recorded-level-per-request","children":[]},{"title":"Lägga till extra meddelandetaggar","anchor":"adding-extra-message-tags","children":[]},{"title":"Misslyckas i tysthet när meddelanderamen är inaktiverad","anchor":"failing-silently-when-the-message-framework-is-disabled","children":[]},{"title":"Lägga till meddelanden i klassbaserade vyer","anchor":"adding-messages-in-class-based-views","children":[]}]},{"title":"Utgång av meddelanden","anchor":"expiration-of-messages","children":[]},{"title":"Beteende för parallella förfrågningar","anchor":"behavior-of-parallel-requests","children":[]},{"title":"Inställningar","anchor":"settings","children":[]},{"title":"Testar","anchor":"testing","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.1/ref/"},{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/6.1/ref/contrib/"}],"prev":{"docname":"ref/contrib/humanize","title":"django.contrib.humanize","url":"/sv/6.1/ref/contrib/humanize/"},"next":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/sv/6.1/ref/contrib/postgres/"},"formats":{"html":"/sv/6.1/ref/contrib/messages/","markdown":"/sv/6.1/ref/contrib/messages.md","json":"/sv/6.1/ref/contrib/messages.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/contrib/messages.txt","official":"https://docs.djangoproject.com/sv/6.1/ref/contrib/messages/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}