{"title":"Kerangka pesan","version":"6.0","locale":"id","docname":"ref/contrib/messages","url":"/id/6.0/ref/contrib/messages/","canonical":"https://djangodocs.dev/id/6.0/ref/contrib/messages/","summary":"Cukup umum dalam aplikasi jaringan, anda butuh memasang pesan pemberitahuan satu-waktu (juga dikenal sebagai \"flash message\") pada pengguna setelah…","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>Cukup umum dalam aplikasi jaringan, anda butuh memasang pesan pemberitahuan satu-waktu (juga dikenal sebagai &quot;flash message&quot;) pada pengguna setelah pengolahan sebuah formulir aau beberapa jenis lain dari masukan pengguna.</p>\n<p>Untuk ini, Django menyediakan dukungan penuh untuk oesan berdasarkan-kue dan sesi, untuk kedua pengguna anonim dan terautentifikasi. Kerangka kerja pesan mengizinkan anda secara sementara menyimpan pesan dalam satu permintaan dam mengambil mereka untuk ditampilkan dalam permintaan selanjutnya (biasanya satu selanjutnya). Setiap pesan dietiket dengan <code class=\"docutils literal notranslate\">level</code> khusus yang menentukan keutamaannya (misalnya, <code class=\"docutils literal notranslate\">info</code>, <code class=\"docutils literal notranslate\">warning</code>, atau <code class=\"docutils literal notranslate\">error</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>Pesan diterapkan melalui <a class=\"reference internal\" href=\"/id/6.0/ref/middleware/\"><span class=\"doc\">middleware</span></a> class dan bersamaan <a class=\"reference internal\" href=\"/id/6.0/ref/templates/api/\"><span class=\"doc\">context processor</span></a>.</p>\n<p>Awalan <code class=\"docutils literal notranslate\">settings.py</code> dibuat oleh <code class=\"docutils literal notranslate\">django-admin startproject</code> sudah mengandung semua pengaturan dibutuhkan untuk mengadakan pesan fungsionalitas:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">'django.contrib.messages'</code> di <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> mengandung <code class=\"docutils literal notranslate\">'django.contrib.sessions.middleware.SessionMiddleware'</code> dan <code class=\"docutils literal notranslate\">'django.contrib.messages.middleware.MessageMiddleware'</code>.</p>\n<p><a class=\"reference internal\" href=\"#message-storage-backends\"><span class=\"std std-ref\">storage backend</span></a> awalan bergantung pada <a class=\"reference internal\" href=\"/id/6.0/topics/http/sessions/\"><span class=\"doc\">sessions</span></a>. Itu mengapa <code class=\"docutils literal notranslate\">SessionMiddleware</code> harus diadakan dan muncul sebelum <code class=\"docutils literal notranslate\">MessageMiddleware</code> dalam <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a>.</p>\n</li>\n<li><p>Pilihan <code class=\"docutils literal notranslate\">'context_processors'</code> dari backend <code class=\"docutils literal notranslate\">DjangoTemplates</code> ditentukan di pengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> anda mengandung <code class=\"docutils literal notranslate\">'django.contrib.messages.context_processors.messages'</code>.</p></li>\n</ul>\n<p>Jika anda tidak ingin menggunakan pesan-pesan, anda dapat memindahkan <code class=\"docutils literal notranslate\">'django.contrib.messages'</code> dari <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> anda, baris <code class=\"docutils literal notranslate\">MessageMiddleware</code> dari <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a>, dan pengolah konteks <code class=\"docutils literal notranslate\">messages</code> dari <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</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\">django.contrib.messages</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\">class</span> </em><span class=\"sig-prename descclassname\">storage.session.</span><span class=\"sig-name descname\">SessionStorage</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>Kelas ini menyimpan semua pesan didalam sesi permintaan. Karena itu membutuhkan aplikasi <code class=\"docutils literal notranslate\">contrib.sessions</code> Django.</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\">class</span> </em><span class=\"sig-prename descclassname\">storage.cookie.</span><span class=\"sig-name descname\">CookieStorage</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\">class</span> </em><span class=\"sig-prename descclassname\">storage.fallback.</span><span class=\"sig-name descname\">FallbackStorage</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>Kelas ini pertama menggunakan <code class=\"docutils literal notranslate\">CookieStorage</code>, dan jatuh kembali menggunakan <code class=\"docutils literal notranslate\">SessionStorage</code> untuk pesan yang tidak cocok dalam kue tunggal. Itu juga membutuhkan aplikasi <code class=\"docutils literal notranslate\">contrib.sessions</code> Django.</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\">FallbackStorage</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/6.0/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_STORAGE</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>MESSAGE_STORAGE <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\">class</span> </em><span class=\"sig-prename descclassname\">storage.base.</span><span class=\"sig-name descname\">BaseStorage</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\">BaseStorage</code> di <code class=\"docutils literal notranslate\">django.contrib.messages.storage.base</code> dan menerapkan metode <code class=\"docutils literal notranslate\">_get</code> dan <code class=\"docutils literal notranslate\">_store</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>Kerangka kerja pesan berdasarkan pada tingkat arsitektur dapat dikonfigurasikan mirip pada modul pencatatan Python. Tingkatan pesan mengizinkan anda mengelompokkan pesan berdasarkan jenis sehingga mereka dapat disaring atau ditampilkan berbeda dalam tampilan atau cetakan.</p>\n<p>Tingkat siap-pakai, yang dapat diimpor dari <code class=\"docutils literal notranslate\">django.contrib.messages</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\">DEBUG</code></p></td>\n<td><p>Pesan-pesan terkait-pengembangan yang akan diabaikan (atau dipindahkan) dalam penyebaran produksi</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</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\">BERHASIL</code></p></td>\n<td><p>Sebuah tindakan telah berhasil, misalnya &quot;Profil anda telah berhasil diperbaharui&quot;.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">PERINGATAN</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\">KESALAHAN</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>Pengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_LEVEL</code></a> dapat digunakan merubah tingkat perekaman minimal (atau itu dapat berupa <a class=\"reference internal\" href=\"#changing-the-minimum-recorded-level-per-request\">changed per request</a>). Usaha-usaha untuk menambahkan pesan-pesan dari tingkatan kurang dari ini akan diabaikan.</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>Etiket-etiket pesan adalah sebuah perwakilan string dari tingkat pesan ditambah etiket-etiket tambahan apapun yang telah ditambahkan langsung dalam tampilan (lihat <a class=\"reference internal\" href=\"#adding-extra-message-tags\">Adding extra message tags</a> dibawah untuk rincian lebih). Etiket disimpan dalam sebuah string dan dipisahkan oleh ruang. Khususnya, etiket-etiket pesan digunakan sebagai kelas-kelas CSS untuk menyesuaikan gaya pesan berdasarkan pada jenis pesan. Secara awalan, setiap tingkat mempunyai etiket tunggal yaitu versi huruf kecil dari ketetapan miliknya.</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\">DEBUG</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">debug</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">info</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">BERHASIL</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">berhasil</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">PERINGATAN</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">peringatan</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">KESALAHAN</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">kesalahan</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Untuk merubah etiket-etiket awalan untuk sebuah tingkat pesan (antara siap-pakai atau penyesuaian), setel pengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a> pada sebuah dictionary mengandung tingkatan anda harap rubah. Ketika ini memperpanjang etiket-etiket awalan, anda hanya butuh menyediakan etiket-etiket untuk tingkatan-tingkatan anda harap timpa:</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=\"nn\">django.contrib.messages</span> <span class=\"kn\">import</span> constants <span class=\"k\">as</span> messages\n\nMESSAGE_TAGS <span class=\"o\">=</span> <span class=\"p\">{</span>\n    messages<span class=\"o\">.</span>INFO<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>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\">add_message</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">level</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">extra_tags<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</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=\"nn\">django.contrib</span> <span class=\"kn\">import</span> messages\n\nmessages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>INFO<span class=\"p\">,</span> <span class=\"s2\">&quot;Hello world.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Beberapa metode jalan pintas menyediakan cara standar untuk menambah pesan-pesan dengan umumnya menggunakan etiket-etiket (yang biasanya diwakili sebagai kelas-kelas HTML untuk pesan):</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>messages<span class=\"o\">.</span>debug<span class=\"p\">(</span>request<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> count<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>info<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Three credits remain in your account.&quot;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>success<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Profile details updated.&quot;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>warning<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Your account expires in three days.&quot;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>error<span class=\"p\">(</span>request<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>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\">get_messages</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</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>In your template</strong>, use something like:</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>Jika anda sedang menggunakan pengolah konteks, cetakan anda harus dibangun dengan <code class=\"docutils literal notranslate\">RequestContext</code>. Sebaliknya, apstikan <code class=\"docutils literal notranslate\">messages</code> tersedia pada konteks cetakan.</p>\n<p>Even if you know there is only one message, you should still iterate over the\n<code class=\"docutils literal notranslate\">messages</code> sequence, because otherwise the message storage will not be\ncleared for the next request.</p>\n<p>The context processor also provides a <code class=\"docutils literal notranslate\">DEFAULT_MESSAGE_LEVELS</code> variable which\nis a mapping of the message level names to their numeric value:</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>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\">get_messages()</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=\"nn\">django.contrib.messages</span> <span class=\"kn\">import</span> get_messages\n\nstorage <span class=\"o\">=</span> get_messages<span class=\"p\">(</span>request<span class=\"p\">)</span>\n<span class=\"k\">for</span> message <span class=\"ow\">in</span> storage<span class=\"p\">:</span>\n    do_something_with_the_message<span class=\"p\">(</span>message<span class=\"p\">)</span>\n</code></pre></div>\n<p>Sebagai contoh, anda dapat mengambil semua pesan-pesan untuk mengembalikan mereka di <a class=\"reference internal\" href=\"/id/6.0/topics/class-based-views/mixins/#jsonresponsemixin-example\"><span class=\"std std-ref\">JSONResponseMixin</span></a> daripada <a class=\"reference internal\" href=\"/id/6.0/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\">TemplateResponseMixin</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\">get_messages()</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\">Message</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.Message\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Message</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>When you loop over the list of messages in a template, what you get are\ninstances of the <code class=\"docutils literal notranslate\">Message</code> class. They have only a few attributes:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">message</code>: Teks sebenarnya dari pesan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">level</code>: Integer menggambarkan jenis dari pesan (lihat bagian <a class=\"reference internal\" href=\"#message-levels\">message levels</a> diatas).</p></li>\n<li><p><code class=\"docutils literal notranslate\">tags</code>: String memadukan semua etiket pesan (<code class=\"docutils literal notranslate\">extra_tags</code> dan <code class=\"docutils literal notranslate\">level_tag</code>) dipisahkan oleh ruang.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_tags</code>: Sebuah string mengandung etiket-etiket penyesuaian untuk pesan ini, dipisahkan oleh ruang. Itu kosong secara awalan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">level_tag</code>: Perwakilan string dari tingkatan. Secara awalan, itu adalah versi huruf kecil dari nama dari ketetapan terkait, tetapi ini dapat berubah jika anda butuh dengan menggunakanpengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a>.</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>Tingkatan pesan tidak lebih dari integer, jadi anda dapat menentukan ketetapan tingkat anda sendiri dan menggunakan mereka membuat umpan balik pengguna penyesuaian lagi, misalnya:</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>CRITICAL <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> CRITICAL<span class=\"p\">,</span> <span class=\"s2\">&quot;A serious error occurred.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ketika membuat tingkatan-tingkatan pesan penyesuaian anda harus waspada menghindari tingkatan-tingkatan yang ada kelebihan beban. Nilai-nilai untuk tingkatan-tingkatan siap-pakai adalah:</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\">DEBUG</code></p></td>\n<td><p>10</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</code></p></td>\n<td><p>20</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">BERHASIL</code></p></td>\n<td><p>25</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">PERINGATAN</code></p></td>\n<td><p>30</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">KESALAHAN</code></p></td>\n<td><p>40</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Jika anda buth mencirikan tingkatan penyesuaian dalam HTML atau CSS, anda butuh menyediakan sebuah pemetaan melalui pengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a>.</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\">set_level</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=\"nn\">django.contrib</span> <span class=\"kn\">import</span> messages\n\n<span class=\"c1\"># Change the messages level to ensure the debug message is added.</span>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>DEBUG<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>debug<span class=\"p\">(</span>request<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>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>WARNING<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>success<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Your profile was updated.&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># ignored</span>\nmessages<span class=\"o\">.</span>warning<span class=\"p\">(</span>request<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>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<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\">get_level</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=\"nn\">django.contrib</span> <span class=\"kn\">import</span> messages\n\ncurrent_level <span class=\"o\">=</span> messages<span class=\"o\">.</span>get_level<span class=\"p\">(</span>request<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>messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>INFO<span class=\"p\">,</span> <span class=\"s2\">&quot;Over 9000!&quot;</span><span class=\"p\">,</span> extra_tags<span class=\"o\">=</span><span class=\"s2\">&quot;dragonball&quot;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>error<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Email box full&quot;</span><span class=\"p\">,</span> extra_tags<span class=\"o\">=</span><span class=\"s2\">&quot;email&quot;</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>Gagal secara diam ketika kerangka kerja pesan ditiadakan<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>Jika anda sedang menulis sebuah aplikasi digunakan kembali (atau potongan lain dari kode) dan ingin menyertakan kegunaan pesan, tetapi tidak ingin membutuhkan pengguna anda mengadakan itu jika mereka tidak ingin, anda mungkin melewatkan sebuah argumen kata kunci tambahan <code class=\"docutils literal notranslate\">fail_silently=True</code> ke apapun dari keluarga <code class=\"docutils literal notranslate\">add_message</code> dari metode-metode. 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>messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>\n    request<span class=\"p\">,</span>\n    messages<span class=\"o\">.</span>SUCCESS<span class=\"p\">,</span>\n    <span class=\"s2\">&quot;Profile details updated.&quot;</span><span class=\"p\">,</span>\n    fail_silently<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>info<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;Hello world.&quot;</span><span class=\"p\">,</span> fail_silently<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>Mengatur <code class=\"docutils literal notranslate\">fail_silently=True</code> hanya menyembunyikan <code class=\"docutils literal notranslate\">MessageFailure</code> yang akan sebaliknya muncul ketika kerangka kerja pesan-pesan ditiadakan dan satu usaha untuk menggunakan satu dari keluarga <code class=\"docutils literal notranslate\">add_message</code> dari metode-metode. Itu tidak menyembunyikan kegagalan yang mungkin muncul untuk alasan-alasan lain.</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\">class</span> </em><span class=\"sig-prename descclassname\">views.</span><span class=\"sig-name descname\">SuccessMessageMixin</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/6.0/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\">FormView</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\">get_success_message</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">cleaned_data</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\">cleaned_data</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=\"nn\">django.contrib.messages.views</span> <span class=\"kn\">import</span> SuccessMessageMixin\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"kn\">import</span> CreateView\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Author\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorCreateView</span><span class=\"p\">(</span>SuccessMessageMixin<span class=\"p\">,</span> CreateView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Author\n    success_url <span class=\"o\">=</span> <span class=\"s2\">&quot;/success/&quot;</span>\n    success_message <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>Data diberishkan dari <code class=\"docutils literal notranslate\">form</code> tersedia untuk penambahan string menggunakan sintaksis <code class=\"docutils literal notranslate\">%(field_name)s</code>. Untuk ModelForms, jika anda butuh mengakses ke bidang-bidang ini dari <code class=\"docutils literal notranslate\">object</code> tersimpan timpa metode <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\">get_success_message()</code></a>.</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=\"nn\">django.contrib.messages.views</span> <span class=\"kn\">import</span> SuccessMessageMixin\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"kn\">import</span> CreateView\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> ComplicatedModel\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ComplicatedCreateView</span><span class=\"p\">(</span>SuccessMessageMixin<span class=\"p\">,</span> CreateView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> ComplicatedModel\n    success_url <span class=\"o\">=</span> <span class=\"s2\">&quot;/success/&quot;</span>\n    success_message <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=\"nf\">get_success_message</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> cleaned_data<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>success_message <span class=\"o\">%</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n            cleaned_data<span class=\"p\">,</span>\n            calculated_field<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>object<span class=\"o\">.</span>calculated_field<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>Pesan-pesan ditandai untuk dibersihkan ketika contoh penyimpanan diulangkan (dan dibersihkan ketika tanggapan diolah).</p>\n<p>Untuk menghindari pesan-pesan sedang dibesihkan, anda dapat menyetel penyimpanan pesan-pesan menjadi <code class=\"docutils literal notranslate\">False</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>storage <span class=\"o\">=</span> messages<span class=\"o\">.</span>get_messages<span class=\"p\">(</span>request<span class=\"p\">)</span>\n<span class=\"k\">for</span> message <span class=\"ow\">in</span> storage<span class=\"p\">:</span>\n    do_something_with<span class=\"p\">(</span>message<span class=\"p\">)</span>\nstorage<span class=\"o\">.</span>used <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>Disebabkan oleh cara kue (dan karena itu sesi) bekerja, <strong>perilaku backend apapun yang menggunakan kue atau sesi tidak ditentukan ketika klien sama membuat banyak permintaan yang mensetel atau mendapatkan pesan-pesan sejajar</strong>. Sebagai contoh, jika sebuah klien memulai sebuah permintaan yang membuat sebuah pesan dalam satu jendela (atau tab) dan kemudian yang mengambil pesan-pesan apapun tidak berstatus di jendela lain, sebelum jendela pertama dialihkan, pesan mungkin muncul dalam jendela kedua darpada jendela pertama dimana itu mungkin diharapkan.</p>\n<p>Ringkasnya, ketika permintaan-permintaan terus-menerus banyak dari klien sama dilibatkan, pesan-pesan tidak dijamin untuk dikirimkan ke jendela sama yang maupun membuat mereka, dalam beberapa kasus, sama sekali. Catat bahwa ini adalah khususnya bukan sebuah masalah dalam kebanyakan aplikasi dan akan menjadi bukan-masalah dalam HTML5, dimana setiap jendela/tab akan mempunyai konteks menjelajah milik sendiri.</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/6.0/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/6.0/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_LEVEL</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_STORAGE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</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/6.0/ref/settings/#std-setting-SESSION_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_DOMAIN</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_SECURE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_HTTPONLY</code></a></p></li>\n</ul>\n</section>\n<section id=\"testing\">\n<h2>Pengujian<a class=\"heading-anchor\" href=\"#testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>This module offers a tailored test assertion method, for testing messages\nattached to an <a class=\"reference internal\" href=\"/id/6.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a>.</p>\n<p>To benefit from this assertion, add <code class=\"docutils literal notranslate\">MessagesTestMixin</code> to the class\nhierarchy:</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=\"nn\">django.contrib.messages.test</span> <span class=\"kn\">import</span> MessagesTestMixin\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> TestCase\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MsgTestCase</span><span class=\"p\">(</span>MessagesTestMixin<span class=\"p\">,</span> TestCase<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Then, inherit from the <code class=\"docutils literal notranslate\">MsgTestCase</code> in your tests.</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\">MessagesTestMixin.</span><span class=\"sig-name descname\">assertMessages</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">response</em>, <em class=\"sig-param\">expected_messages</em>, <em class=\"sig-param\">ordered<span class=\"o\">=</span><span class=\"default_value\">True</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>Asserts that <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\">messages</code></a> added to the <a class=\"reference internal\" href=\"/id/6.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">response</code></a> matches <code class=\"docutils literal notranslate\">expected_messages</code>.</p>\n<p><code class=\"docutils literal notranslate\">expected_messages</code> is a list of\n<a class=\"reference internal\" href=\"#django.contrib.messages.Message\" title=\"django.contrib.messages.Message\"><code class=\"xref py py-class docutils literal notranslate\">Message</code></a> objects.</p>\n<p>By default, the comparison is ordering dependent. You can disable this by\nsetting the <code class=\"docutils literal notranslate\">ordered</code> argument to <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\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":"Gagal secara diam ketika kerangka kerja pesan ditiadakan","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":[]},{"title":"Pengujian","anchor":"testing","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/6.0/ref/"},{"docname":"ref/contrib/index","title":"Paket contrib","url":"/id/6.0/ref/contrib/"}],"prev":{"docname":"ref/contrib/humanize","title":"django.contrib.humanize","url":"/id/6.0/ref/contrib/humanize/"},"next":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/id/6.0/ref/contrib/postgres/"},"formats":{"html":"/id/6.0/ref/contrib/messages/","markdown":"/id/6.0/ref/contrib/messages.md","json":"/id/6.0/ref/contrib/messages.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/contrib/messages.txt","official":"https://docs.djangoproject.com/id/6.0/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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}