{"title":"Kerangka pesan","version":"1.11","locale":"id","docname":"ref/contrib/messages","url":"/id/1.11/ref/contrib/messages/","canonical":"https://djangodocs.dev/id/1.11/ref/contrib/messages/","summary":"Quite commonly in web applications, you need to display a one-time notification message (also known as \"flash message\") to the user after processing a form or some…","html":"<span id=\"the-messages-framework\"></span><h1>Kerangka pesan<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>Quite commonly in web applications, you need to display a one-time\nnotification message (also known as &quot;flash message&quot;) to the user after\nprocessing a form or some other types of user input.</p>\n<p>For this, Django provides full support for cookie- and session-based\nmessaging, for both anonymous and authenticated users. The messages framework\nallows you to temporarily store messages in one request and retrieve them for\ndisplay in a subsequent request (usually the next one). Every message is\ntagged with a specific <code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code> that determines its priority (e.g., <code class=\"docutils literal notranslate\"><span class=\"pre\">info</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">warning</span></code>, or <code class=\"docutils literal notranslate\"><span class=\"pre\">error</span></code>).</p>\n<section id=\"enabling-messages\">\n<h2>Mengadakan pesan<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>Messages are implemented through a <a class=\"reference internal\" href=\"/id/1.11/ref/middleware/\"><span class=\"doc\">middleware</span></a>\nclass and corresponding <a class=\"reference internal\" href=\"/id/1.11/ref/templates/api/\"><span class=\"doc\">context processor</span></a>.</p>\n<p>Awalan <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> dibuat oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code> sudah mengandung semua pengaturan dibutuhkan untuk mengadakan pesan fungsionalitas:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> di <a class=\"reference internal\" href=\"/id/1.11/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=\"/id/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> mengandung <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions.middleware.SessionMiddleware'</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.middleware.MessageMiddleware'</span></code>.</p>\n<p>The default <a class=\"reference internal\" href=\"#message-storage-backends\"><span class=\"std std-ref\">storage backend</span></a> relies on\n<a class=\"reference internal\" href=\"/id/1.11/topics/http/sessions/\"><span class=\"doc\">sessions</span></a>. That's why <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code>\nmust be enabled and appear before <code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> in\n<a class=\"reference internal\" href=\"/id/1.11/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>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">'context_processors'</span></code> dari backend <code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code> ditentukan di pengaturan <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> anda mengandung <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages.context_processors.messages'</span></code>.</p></li>\n</ul>\n<p>If you don't want to use messages, you can remove\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.messages'</span></code> from your <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code> line from <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a>, and the <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code>\ncontext processor from <a class=\"reference internal\" href=\"/id/1.11/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>Konfigurasi mesin pesan<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 Penyimpanan<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>Kerangka kerja pesan-pesan dapat menggunakan backend berbeda untuk menyimpan pesan-pesan sementara.</p>\n<p>Django menyediakan kelas-kelas penyimpanan siap-pakai di <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>This class stores all messages inside of the request's session. Therefore\nit requires Django's <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code> application.</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>Kelas ini menyimpan data pesan dalam sebuah kue (ditandai dengan campuran rahasia untuk mencegah perubahan) untuk bertahan pemberitahuan terhadap permintaan. Pesan-pesan lama dibuang jika ukuran data kue akan melebihi 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>This class first uses <code class=\"docutils literal notranslate\"><span class=\"pre\">CookieStorage</span></code>, and falls back to using\n<code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStorage</span></code> for the messages that could not fit in a single cookie.\nIt also requires Django's <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.sessions</span></code> application.</p>\n<p>Perilaku ini menghindari menulis ke sesi bilamana memungkinkan. Itu harus menyediakan penampilan terbaik di kasus umum.</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> adalah kelas penyimpanan awalan. Jika itu tidak cocok pada kebutuhan anda, anda dapat memilih kelas penyimpanan lain dengan mengatur <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_STORAGE</span></code></a> ke jalur impor penuhnya, sebagai contoh:</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>Untuk menulis kelas penyimpanan sendiri, subkelas kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseStorage</span></code> di <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.storage.base</span></code> dan menerapkan metode <code class=\"docutils literal notranslate\"><span class=\"pre\">_get</span></code> dan <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>Tingkatan pesan<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>The messages framework is based on a configurable level architecture similar\nto that of the Python logging module. Message levels allow you to group\nmessages by type so they can be filtered or displayed differently in views and\ntemplates.</p>\n<p>Tingkat siap-pakai, yang dapat diimpor dari <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages</span></code> secar langsung, adalah:</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>Ketetapan</p></th>\n<th class=\"head\"><p>Maksud</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>Development-related messages that will be ignored (or removed) in a production deployment</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>Pesan informasi untuk pengguna</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">BERHASIL</span></code></p></td>\n<td><p>Sebuah tindakan telah berhasil, sebagai contoh &quot;Profil anda telah berhasil diperbaharui&quot;.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">PERINGATAN</span></code></p></td>\n<td><p>Kegagalan tidak muncul tetapi mungkin sebentar lagi</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">KESALAHAN</span></code></p></td>\n<td><p>Sebuah tindakan <strong>tidak</strong> berhasil atau beberapa kegagalan lain muncul</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>The <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_LEVEL</span></code></a> setting can be used to change the minimum recorded level\n(or it can be <a class=\"reference internal\" href=\"#changing-the-minimum-recorded-level-per-request\">changed per request</a>). Attempts to add messages of a level less\nthan this will be ignored.</p>\n</section>\n<section id=\"message-tags\">\n<h3>Etiket pesan<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>Message tags are a string representation of the message level plus any\nextra tags that were added directly in the view (see\n<a class=\"reference internal\" href=\"#adding-extra-message-tags\">Adding extra message tags</a> below for more details). Tags are stored in a\nstring and are separated by spaces. Typically, message tags\nare used as CSS classes to customize message style based on message type. By\ndefault, each level has a single tag that's a lowercase version of its own\nconstant:</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>Tingkat Ketetapan</p></th>\n<th class=\"head\"><p>Etiket</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\">BERHASIL</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">berhasil</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">PERINGATAN</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">peringatan</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">KESALAHAN</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kesalahan</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>To change the default tags for a message level (either built-in or custom),\nset the <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> setting to a dictionary containing the levels\nyou wish to change. As this extends the default tags, you only need to provide\ntags for the levels you wish to override:</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>Menggunakan pesan di tampilan dan cetakan<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>Menambahkan pesan<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>Untuk menambahkan pesan, panggil:</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>Some shortcut methods provide a standard way to add messages with commonly\nused tags (which are usually represented as HTML classes for the message):</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>Menampilkan pesan<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>Di cetakan anda</strong>, gunakan sesuatu seperti:</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>If you're using the context processor, your template should be rendered with a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code>. Otherwise, ensure <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> is available to\nthe template context.</p>\n<p>Even if you know there is only just one message, you should still iterate over\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code> sequence, because otherwise the message storage will not be cleared\nfor the next request.</p>\n<p>The context processor also provides a <code class=\"docutils literal notranslate\"><span class=\"pre\">DEFAULT_MESSAGE_LEVELS</span></code> variable which\nis a mapping of the message level names to their numeric value:</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>Diluar Cetakan</strong>, anda dapat menggunakan <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>For instance, you can fetch all the messages to return them in a\n<a class=\"reference internal\" href=\"/id/1.11/topics/class-based-views/mixins/#jsonresponsemixin-example\"><span class=\"std std-ref\">JSONResponseMixin</span></a> instead of a\n<a class=\"reference internal\" href=\"/id/1.11/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> akan mengembalikan sebuah instance dari backend penyimpanan dikonfigurasi</p>\n</section>\n<section id=\"the-message-class\">\n<h3>Kelas <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. It's quite a simple object, with only a\nfew attributes:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>: Teks sebenarnya dari pesan.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code>: An integer describing the type of the message (see the\n<a class=\"reference internal\" href=\"#message-levels\">message levels</a> section above).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tags</span></code>: A string combining all the message's tags (<code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>) separated by spaces.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_tags</span></code>: A string containing custom tags for this message,\nseparated by spaces. It's empty by default.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">level_tag</span></code>: The string representation of the level. By default, it's\nthe lowercase version of the name of the associated constant, but this\ncan be changed if you need by using the <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> setting.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"creating-custom-message-levels\">\n<h3>Membuat penyesuaian tingkatan pesan<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>Messages levels are nothing more than integers, so you can define your own\nlevel constants and use them to create more customized user feedback, e.g.:</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>When creating custom message levels you should be careful to avoid overloading\nexisting levels. The values for the built-in levels are:</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>Tingkat Ketetapan</p></th>\n<th class=\"head\"><p>Nilai</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\">BERHASIL</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\">PERINGATAN</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\">KESALAHAN</span></code></p></td>\n<td><p>40</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>If you need to identify the custom levels in your HTML or CSS, you need to\nprovide a mapping via the <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MESSAGE_TAGS</span></code></a> setting.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Jika anda sedang membuat aplikasi digunakan kembali, itu sangat dianjurkan untuk menggunakan hanya <a class=\"reference internal\" href=\"#message-levels\">message levels</a> siap-pakai dan jangan bergantung pada penyesuaian tingkat apapun</p>\n</aside>\n</section>\n<section id=\"changing-the-minimum-recorded-level-per-request\">\n<h3>Merubah tingkat terekam minimal per-permintaan<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>Tingkat terekam minimal dapat disetel per permintaan melalui metode <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=\"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>Mirip, tingkat efektif saat ini dapat diambil dengan <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>Untuk informasi lebih pada bagaimana fungsi tingkat terekam minimal, lihat <a class=\"reference internal\" href=\"#message-levels\">Message levels</a> diatas.</p>\n</section>\n<section id=\"adding-extra-message-tags\">\n<h3>Menambahkan etiket pesan tambahan<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>Untuk lebih kendali langsung melalui etiket pesan, anda dapat secara pilihan menyediakan string mengandung etiket tambahan ke apapun dari metode tambah:</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>Etiket tambahan ditambahkan sebelum etiket awalan untuk tingkat itu dan ruang terpisah.</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\">Catatan</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>Menambahkan pesan-pesan di tampilan berdasarkan-kelas<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>Menambah sebuah atribut pesan berhasil pada <a class=\"reference internal\" href=\"/id/1.11/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> berdasarkan kelas-kelas</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> adalah data dibersihkan dari formulir yang digunakan untuk pembentukan string</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><strong>Contoh 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\">AuthorCreate</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>Contoh views.py untuk 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\">ComplicatedCreate</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>Pesan berakhir<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>Untuk menghindari pesan-pesan sedang dibesihkan, anda dapat menyetel penyimpanan pesan-pesan menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> setelah perulangan:</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>Perilaku dari permintaan paralel<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>Pengaturan<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sedikit <a class=\"reference internal\" href=\"/id/1.11/ref/settings/#settings-messages\"><span class=\"std std-ref\">settings</span></a> memberikan anda kendali terhadap perilaku pesan:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/1.11/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=\"/id/1.11/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=\"/id/1.11/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>Untuk backend yang menggunakan kue, pengaturan untuk kue diambil dari pengaturan kue sesi:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/1.11/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=\"/id/1.11/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=\"/id/1.11/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":"Mengadakan pesan","anchor":"enabling-messages","children":[]},{"title":"Konfigurasi mesin pesan","anchor":"configuring-the-message-engine","children":[{"title":"Backend Penyimpanan","anchor":"storage-backends","children":[]},{"title":"Tingkatan pesan","anchor":"message-levels","children":[]},{"title":"Etiket pesan","anchor":"message-tags","children":[]}]},{"title":"Menggunakan pesan di tampilan dan cetakan","anchor":"using-messages-in-views-and-templates","children":[{"title":"Menambahkan pesan","anchor":"adding-a-message","children":[]},{"title":"Menampilkan pesan","anchor":"displaying-messages","children":[]},{"title":"Kelas Message","anchor":"the-message-class","children":[]},{"title":"Membuat penyesuaian tingkatan pesan","anchor":"creating-custom-message-levels","children":[]},{"title":"Merubah tingkat terekam minimal per-permintaan","anchor":"changing-the-minimum-recorded-level-per-request","children":[]},{"title":"Menambahkan etiket pesan tambahan","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":"Menambahkan pesan-pesan di tampilan berdasarkan-kelas","anchor":"adding-messages-in-class-based-views","children":[]}]},{"title":"Pesan berakhir","anchor":"expiration-of-messages","children":[]},{"title":"Perilaku dari permintaan paralel","anchor":"behavior-of-parallel-requests","children":[]},{"title":"Pengaturan","anchor":"settings","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/1.11/ref/"},{"docname":"ref/contrib/index","title":"Paket contrib","url":"/id/1.11/ref/contrib/"}],"prev":{"docname":"ref/contrib/humanize","title":"django.contrib.humanize","url":"/id/1.11/ref/contrib/humanize/"},"next":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/id/1.11/ref/contrib/postgres/"},"formats":{"html":"/id/1.11/ref/contrib/messages/","markdown":"/id/1.11/ref/contrib/messages.md","json":"/id/1.11/ref/contrib/messages.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/ref/contrib/messages.txt","official":"https://docs.djangoproject.com/id/1.11/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","fr","ja","id","pt-br","ko","es","el","pl"]}