{"title":"Gaya pengkodean","version":"5.2","locale":"id","docname":"internals/contributing/writing-code/coding-style","url":"/id/5.2/internals/contributing/writing-code/coding-style/","canonical":"https://djangodocs.dev/id/5.2/internals/contributing/writing-code/coding-style/","summary":"Silahkan ikuti standar pengkodean ini ketika menulis kode untuk penyertaan di Django. Pemeriksaan pra-komitmen Link to this heading # pre-commit is a framework for…","html":"<h1>Gaya pengkodean<a class=\"heading-anchor\" href=\"#coding-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Silahkan ikuti standar pengkodean ini ketika menulis kode untuk penyertaan di Django.</p>\n<section id=\"pre-commit-checks\">\n<span id=\"coding-style-pre-commit\"></span><h2>Pemeriksaan pra-komitmen<a class=\"heading-anchor\" href=\"#pre-commit-checks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference external\" href=\"https://pre-commit.com\">pre-commit</a> is a framework for managing pre-commit\nhooks. These hooks help to identify simple issues before committing code for\nreview. By checking for these issues before code review it allows the reviewer\nto focus on the change itself, and it can also help to reduce the number of CI\nruns.</p>\n<p>Untuk menggunakan alat, pertama pasang <code class=\"docutils literal notranslate\"><span class=\"pre\">pre-commit</span></code> dan kemudian kait git:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>pre-commit\n<span class=\"gp\">$ </span>pre-commit<span class=\"w\"> </span>install\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install pre-commit\n<span class=\"gp\">...\\&gt;</span> pre-commit install\n</code></pre></div></div></div>\n<p>On the first commit <code class=\"docutils literal notranslate\"><span class=\"pre\">pre-commit</span></code> will install the hooks, these are\ninstalled in their own environments and will take a short while to\ninstall on the first run. Subsequent checks will be significantly faster.\nIf an error is found an appropriate error message will be displayed.\nIf the error was with <code class=\"docutils literal notranslate\"><span class=\"pre\">black</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">isort</span></code> then the tool will go ahead and\nfix them for you. Review the changes and re-stage for commit if you are happy\nwith them.</p>\n</section>\n<section id=\"python-style\">\n<span id=\"coding-style-python\"></span><h2>Gaya Phyton<a class=\"heading-anchor\" href=\"#python-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul>\n<li><p>All files should be formatted using the <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/black/\">black</a> auto-formatter. This\nwill be run by <code class=\"docutils literal notranslate\"><span class=\"pre\">pre-commit</span></code> if that is configured.</p></li>\n<li><p>The project repository includes an <code class=\"docutils literal notranslate\"><span class=\"pre\">.editorconfig</span></code> file. We recommend using\na text editor with <a class=\"reference external\" href=\"https://editorconfig.org/\">EditorConfig</a> support to avoid indentation and\nwhitespace issues. The Python files use 4 spaces for indentation and the HTML\nfiles use 2 spaces.</p></li>\n<li><p>Meskipun sebaliknya ditentukan, ikuti <span class=\"target\" id=\"index-9\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a>.</p>\n<p>Use <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/flake8/\">flake8</a> to check for problems in this area. Note that our\n<code class=\"docutils literal notranslate\"><span class=\"pre\">.flake8</span></code> file excludes some errors that we don't consider as gross\nviolations. Remember that <span class=\"target\" id=\"index-1\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> is only a guide, so respect the style of\nthe surrounding code as a primary goal.</p>\n<p>An exception to <span class=\"target\" id=\"index-2\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> is our rules on line lengths. Don't limit lines of\ncode to 79 characters if it means the code looks significantly uglier or is\nharder to read. We allow up to 88 characters as this is the line length used\nby <code class=\"docutils literal notranslate\"><span class=\"pre\">black</span></code>. This check is included when you run <code class=\"docutils literal notranslate\"><span class=\"pre\">flake8</span></code>. Documentation,\ncomments, and docstrings should be wrapped at 79 characters, even though\n<span class=\"target\" id=\"index-3\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> suggests 72.</p>\n</li>\n<li><p>String variable interpolation may use\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#old-string-formatting\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">%-formatting</span></a>, <a class=\"reference external\" href=\"https://docs.python.org/3/reference/lexical_analysis.html#f-strings\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">f-strings</span></a>, or <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> as appropriate, with the goal of\nmaximizing code readability.</p>\n<p>Final judgments of readability are left to the Merger's discretion. As a\nguide, f-strings should use only plain variable and property access, with\nprior local variable assignment for more complex cases:</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=\"c1\"># Allowed</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span><span class=\"n\">user</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n\n<span class=\"c1\"># Disallowed</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span><span class=\"n\">get_user</span><span class=\"p\">()</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;you are </span><span class=\"si\">{</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"mf\">365.25</span><span class=\"si\">}</span><span class=\"s2\"> days old&quot;</span>\n\n<span class=\"c1\"># Allowed with local variable assignment</span>\n<span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">get_user</span><span class=\"p\">()</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span><span class=\"n\">user</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n<span class=\"n\">user_days_old</span> <span class=\"o\">=</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">age</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;you are </span><span class=\"si\">{</span><span class=\"n\">user_days_old</span><span class=\"si\">}</span><span class=\"s2\"> days old&quot;</span>\n</code></pre></div>\n<p>f-strings should not be used for any string that may require translation,\nincluding error and logging messages. In general <code class=\"docutils literal notranslate\"><span class=\"pre\">format()</span></code> is more\nverbose, so the other formatting methods are preferred.</p>\n<p>Don't waste time doing unrelated refactoring of existing code to adjust the\nformatting method.</p>\n</li>\n<li><p>Hindari penggunaan &quot;we&quot; dalam komentar, sebagai contoh &quot;Loop over&quot; daripada &quot;We loop over&quot;.</p></li>\n<li><p>Gunakan garis bawah, bukan camelCase, untuk variabel, fungsi dan nama-nama metode (yaitu <code class=\"docutils literal notranslate\"><span class=\"pre\">poll.get_unique_voters()</span></code>, bukan <code class=\"docutils literal notranslate\"><span class=\"pre\">poll.getUniqueVoters()</span></code>).</p></li>\n<li><p>Gunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">InitialCaps</span></code> untuk nama-nama kelas (atau untuk fungsi pabrik yang mengembalikan kelas-kelas).</p></li>\n<li><p>Dalam docstring, ikuti gaya dari docstring yang ada dan <span class=\"target\" id=\"index-10\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0257/\"><strong>PEP 257</strong></a>.</p></li>\n<li><p>Dalam percobaan, gunakan <a class=\"reference internal\" href=\"/id/5.2/topics/testing/tools/#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesMessage()</span></code></a> dan <a class=\"reference internal\" href=\"/id/5.2/topics/testing/tools/#django.test.SimpleTestCase.assertWarnsMessage\" title=\"django.test.SimpleTestCase.assertWarnsMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsMessage()</span></code></a> daripada <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaises()</span></code></a> dan <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertWarns\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarns()</span></code></a> sehingga anda dapat memeriksa pengecualian atau pesan peringatan. Hanya gunakan <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesRegex()</span></code></a> dan <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertWarnsRegex\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsRegex()</span></code></a> jika anda butuh pencocokan regular expression.</p>\n<p>Gunakan <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertIs\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertIs(…,</span> <span class=\"pre\">True/False)</span></code></a> untuk pengujian nilai boolean, daripada <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTrue()</span></code></a> dan <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertFalse\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertFalse()</span></code></a>, sehingga anda dapat memeriksa nilai boolean sebenarnya, bukan kebenaran dari pernyataan.</p>\n</li>\n<li><p>Dalam docstring percobaan, nyatakan perilaku yang diharapkan yang setiap percobaan ditunjukkan. Jangan menyertakan pembukaan seperti &quot;Tests that&quot; atau &quot;Ensures that&quot;.</p>\n<p>Acuan tiket balikan untuk mengaburkan masalah dimana tiket mempunyai rincian tambahan yang tidak dapat dengan mudah digambarkan dalam docstring atau komentar. Termasuk nomor tiket pada akhir dari sebuah kalimat seperti ini:</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_foo</span><span class=\"p\">():</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A test docstring looks like this (#123456).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</li>\n<li><p>Where applicable, use unpacking generalizations compliant with <span class=\"target\" id=\"index-5\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0448/\"><strong>PEP 448</strong></a>,\nsuch as merging mappings (<code class=\"docutils literal notranslate\"><span class=\"pre\">{**x,</span> <span class=\"pre\">**y}</span></code>) or sequences (<code class=\"docutils literal notranslate\"><span class=\"pre\">[*a,</span> <span class=\"pre\">*b]</span></code>). This\nimproves performance, readability, and maintainability while reducing errors.</p></li>\n</ul>\n</section>\n<section id=\"imports\">\n<span id=\"coding-style-imports\"></span><h2>Impor<a class=\"heading-anchor\" href=\"#imports\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul>\n<li><p>Gunakan <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/isort/\">isort</a> untuk mengotomatisasi pengurutan impor menggunakan panduan dibawah.</p>\n<p>Mulai cepat:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span><span class=\"s2\">&quot;isort &gt;= 7.0.0&quot;</span>\n<span class=\"gp\">$ </span>isort<span class=\"w\"> </span>.\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install <span class=\"s2\">&quot;isort &gt;= 7.0.0&quot;</span>\n<span class=\"gp\">...\\&gt;</span> isort .\n</code></pre></div></div></div>\n<p>Ini menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">isort</span></code> secara berulang dari pelipat anda saat ini, merubah berkas apapun yang tidak sesuai pada baris panduan. Jika anda butuh mengimpor rusak (untuk menghidari impor memutar, sebagai contoh) gunakan komentar seperti ini:</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\">import</span><span class=\"w\"> </span><span class=\"nn\">module</span>  <span class=\"c1\"># isort:skip</span>\n</code></pre></div>\n</li>\n<li><p>Taruh impor dalam kelompok ini: akan datang, pustaka standar, pustaka pihak-ketiga, komponen Django lainnya, komponen Django lokal, coba/pengecualian. Urutkan baris dalam setiap kelompok secara alfabet dengan nama modul penuh. Tempatkan semua pernyataan <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">module</span></code> sebelum <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">module</span> <span class=\"pre\">import</span> <span class=\"pre\">objects</span></code> di setiap bagian. Gunakan impor sepenuhnya untuk komponen Django lainnya dan impor berhubugan untuk komponen lokal.</p></li>\n<li><p>Pada setiap baris, mengabjadkan barang dengan barang huruf besar dikelompokkan sebelum barang huruf kecil.</p></li>\n<li><p>Putuskan baris panjang menggunakan kurung dan lekukan garis kelanjutan dengan 4 ruang. Termasuk koma yang membuntuti setelah impor terakhir dan taruh kurung penutup pada baris itu sendiri.</p>\n<p>Gunakan baris kosong tunggal diantara impor terakhir dan tiap modul kode tingkatan, dan gunakan dua baris kosong diatas fungsi atau kelas pertama.</p>\n<p>Sebagai contoh (komentar hanya untuk tujuan penjelasan):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django/contrib/admin/example.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"c1\"># future</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">__future__</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">unicode_literals</span>\n\n<span class=\"c1\"># standard library</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">json</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">itertools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">chain</span>\n\n<span class=\"c1\"># third-party</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">bcrypt</span>\n\n<span class=\"c1\"># Django</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http.response</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"p\">(</span>\n    <span class=\"n\">Http404</span><span class=\"p\">,</span>\n    <span class=\"n\">HttpResponse</span><span class=\"p\">,</span>\n    <span class=\"n\">HttpResponseNotAllowed</span><span class=\"p\">,</span>\n    <span class=\"n\">StreamingHttpResponse</span><span class=\"p\">,</span>\n    <span class=\"n\">cookie</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n\n<span class=\"c1\"># local Django</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LogEntry</span>\n\n<span class=\"c1\"># try/except</span>\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">yaml</span>\n<span class=\"k\">except</span> <span class=\"ne\">ImportError</span><span class=\"p\">:</span>\n    <span class=\"n\">yaml</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"n\">CONSTANT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;foo&quot;</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Example</span><span class=\"p\">:</span> <span class=\"o\">...</span>\n</code></pre></figure>\n</li>\n<li><p>Gunakan impor praktis kapan pun tersedia. Misalnya, lakukan ini</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.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">View</span>\n</code></pre></div>\n<p>dari pada:</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.views.generic.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">View</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"template-style\">\n<h2>Gaya cetakan<a class=\"heading-anchor\" href=\"#template-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ikuti aturan dibawah ini dalam kode cetakan Django.</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code> harus menjadi baris non-komentar pertama.</p>\n<p>Lakukan ini:</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\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">h1</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;font-semibold text-xl&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">pages.title</span> <span class=\"cp\">}}</span>\n  <span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Atau ini:</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=\"c\">{# This is a comment #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">h1</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;font-semibold text-xl&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">pages.title</span> <span class=\"cp\">}}</span>\n  <span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">load</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">h1</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;font-semibold text-xl&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">pages.title</span> <span class=\"cp\">}}</span>\n  <span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>Taruh tepatnya satu ruang diantara <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span></code>, konteks variabel, dan <code class=\"docutils literal notranslate\"><span class=\"pre\">}}</span></code>.</p>\n<p>Lakukan ini:</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=\"nv\">user</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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=\"nv\">user</span><span class=\"cp\">}}</span>\n</code></pre></div>\n</li>\n<li><p>Di <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">muat</span> <span class=\"pre\">...</span> <span class=\"pre\">%}</span></code>, daftar pustaka dalam urutan alfabet.</p>\n<p>Lakukan ini:</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\">load</span> <span class=\"nv\">i18n</span> <span class=\"nv\">l10</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">load</span> <span class=\"nv\">l10</span> <span class=\"nv\">i18n</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>Put exactly one space between <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span></code>, tag contents, and <code class=\"docutils literal notranslate\"><span class=\"pre\">%}</span></code>.</p>\n<p>Lakukan ini:</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\">load</span> <span class=\"nv\">humanize</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">load</span> <span class=\"nv\">humanize</span><span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>Put the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> tag name in the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">endblock</span> <span class=\"pre\">%}</span></code> tag if it is not\non the same line.</p>\n<p>Lakukan ini:</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\">block</span> <span class=\"nv\">header</span> <span class=\"cp\">%}</span>\n\n  Code goes here\n\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">header</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">block</span> <span class=\"nv\">header</span> <span class=\"cp\">%}</span>\n\n  Code goes here\n\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>Inside curly braces, separate tokens by single spaces, except for around the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code> for attribute access and the <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> for a filter.</p>\n<p>Lakukan ini:</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\">user.name</span><span class=\"o\">|</span><span class=\"nf\">lower</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;admin&quot;</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">user</span> <span class=\"p\">.</span> <span class=\"nv\">name</span> <span class=\"o\">|</span> <span class=\"nf\">lower</span>  <span class=\"o\">==</span>  <span class=\"s2\">&quot;admin&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"nv\">user.name</span> <span class=\"o\">|</span> <span class=\"nf\">upper</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n</li>\n<li><p>Within a template using <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code>, avoid indenting top-level\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> tags.</p>\n<p>Lakukan ini:</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\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n  <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n  ...\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"view-style\">\n<h2>Gaya tampilan<a class=\"heading-anchor\" href=\"#view-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul>\n<li><p>Dalam tampilan Django, parameter pertama dalam sebuah fungsi tampilan harus dipanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>.</p>\n<p>Lakukan ini:</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=\"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> <span class=\"n\">foo</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">req</span><span class=\"p\">,</span> <span class=\"n\">foo</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"model-style\">\n<h2>Gaya model<a class=\"heading-anchor\" href=\"#model-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul>\n<li><p>Nama-nama bidang harus semuanya huruf kecil, menggunakan garis bawah daripada camelCase.</p>\n<p>Lakukan ini:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">FirstName</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    <span class=\"n\">Last_Name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Meta</span></code> harus muncul <em>setelah</em> bidang ditentukan, dengan baris tunggal kosong memisahkan penentuan bidang-bidang dan kelas</p>\n<p>Lakukan ini:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;people&quot;</span>\n</code></pre></div>\n<p>Jangan lakukan ini:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;people&quot;</span>\n\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>Urutan model kelas-kelas sebelah dalam dan cara standar harus sebagai berikut (catat bahwa ini tidak wajib):</p>\n<ul class=\"simple\">\n<li><p>Semua bidang basisdata</p></li>\n<li><p>Penyesuaian pengelolaan atribut</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">class</span> <span class=\"pre\">Meta</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">__str__()</span></code> dan metode ajaib Python lainnya</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">save()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">get_absolute_url()</span></code></p></li>\n<li><p>Cara penyesuaian apapun</p></li>\n</ul>\n</li>\n<li><p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> is defined for a given model field, define each choice as a\nmapping, with an all-uppercase name as a class attribute on the model.\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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">DIRECTION_UP</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;U&quot;</span>\n    <span class=\"n\">DIRECTION_DOWN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;D&quot;</span>\n    <span class=\"n\">DIRECTION_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"n\">DIRECTION_UP</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Up&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">DIRECTION_DOWN</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Down&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Alternatifnya, pertimbangkan menggunakan <a class=\"reference internal\" href=\"/id/5.2/ref/models/fields/#field-choices-enum-types\"><span class=\"std std-ref\">Enumeration types</span></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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Direction</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextChoices</span><span class=\"p\">):</span>\n        <span class=\"n\">UP</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;U&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Up&quot;</span>\n        <span class=\"n\">DOWN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;D&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Down&quot;</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"use-of-django-conf-settings\">\n<h2>Penggunaan <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code><a class=\"heading-anchor\" href=\"#use-of-django-conf-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Modul-modul tidak harus dalam pengaturan penggunaan umum di <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> pada tingkatan atas (yaitu dinilai ketika modul diimpor). Penjelasan untuk ini adalah sebagai berikut:</p>\n<p>Manual configuration of settings (i.e. not relying on the\n<span class=\"target\" id=\"index-6\"></span><a class=\"reference internal\" href=\"/id/5.2/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> environment variable) is allowed and possible\nas follows:</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n<span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">({},</span> <span class=\"n\">SOME_SETTING</span><span class=\"o\">=</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Bagaimanapun, jika tiap pengaturan diakses sebelum baris <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.configure</span></code>, ini tidak akan bekerja (Secara internal, <code class=\"docutils literal notranslate\"><span class=\"pre\">settings</span></code> adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">LazyObject</span></code> yang mengkonfigurasikan diri dia sendiri otomatis ketika pengaturan diakses jika dia belum dikonfigurasikan).</p>\n<p>Jadi, jika terdapat modul mengandung beberapa kode sebagai berikut:</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_callable</span>\n\n<span class=\"n\">default_foo_view</span> <span class=\"o\">=</span> <span class=\"n\">get_callable</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">FOO_VIEW</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...kemudian mengimpor modul ini akan menyebabkan pengaturan obyek untuk dikonfigurasi. Itu berarti bahwa kemampuan untuk pihak ketiga mengimpor modul pada tingkat atas tidak sesuai dengan kemampuan mengkonfigurasi pengaturan obyek secara manual, atau membuatnya sulit di beberapa keadaan.</p>\n<p>Sebagai gantinya kode diatas, tingkatan kemalasan atau tipuan harus digunakan, seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.functional.LazyObject</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.functional.lazy()</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code>.</p>\n</section>\n<section id=\"miscellaneous\">\n<h2>Bermacam-macam<a class=\"heading-anchor\" href=\"#miscellaneous\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Tandai semua deretan karakter untuk internasionalisasi; lihat <a class=\"reference internal\" href=\"/id/5.2/topics/i18n/\"><span class=\"doc\">i18n documentation</span></a> untuk rincian.</p></li>\n<li><p>Remove <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> statements that are no longer used when you change code.\n<a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/flake8/\">flake8</a> will identify these imports for you. If an unused import needs\nto remain for backwards-compatibility, mark the end of with <code class=\"docutils literal notranslate\"><span class=\"pre\">#</span> <span class=\"pre\">NOQA</span></code> to\nsilence the flake8 warning.</p></li>\n<li><p>Secara teratur pindahkan semua ruang kosong dari kode anda dimana mereka menambahkan byte yang tidak dibutuhkan, tambah kekacauan penglihatan pada tambalan dan juga terkadang menyebabkan pertentangan penggabungan yang tidak diperlukan. Beberapa IDE dapat dikonfigurasikan otomatis memindahkan mereka dan kebanyakan alat-alat VCS dapat di setel untuk menyorot mereka di keluaran berbeda.</p></li>\n<li><p>Harap jangan menaruh nama anda di kode anda sumbangkan. Kebijakan kami adalah menjaga nama-nama penyumbang di berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHORS</span></code> disalurkan dengan Django -- bukan goresan melalui basis kode itu sendiri. Merasa bebas untuk menyertakan perubahan pada berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHORS</span></code> di tambalan anda jika anda membuat lebih dari perubahan sepele tunggal.</p></li>\n</ul>\n</section>\n<section id=\"javascript-style\">\n<h2>Gaya JavaScript<a class=\"heading-anchor\" href=\"#javascript-style\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Untuk rincian tentang gaya kode JavaScript digunakan oleh Django, lihat <a class=\"reference internal\" href=\"/id/5.2/internals/contributing/writing-code/javascript/\"><span class=\"doc\">Kode JavaScript</span></a>.</p>\n</section>","rootId":"coding-style","toc":[{"title":"Pemeriksaan pra-komitmen","anchor":"pre-commit-checks","children":[]},{"title":"Gaya Phyton","anchor":"python-style","children":[]},{"title":"Impor","anchor":"imports","children":[]},{"title":"Gaya cetakan","anchor":"template-style","children":[]},{"title":"Gaya tampilan","anchor":"view-style","children":[]},{"title":"Gaya model","anchor":"model-style","children":[]},{"title":"Penggunaan django.conf.settings","anchor":"use-of-django-conf-settings","children":[]},{"title":"Bermacam-macam","anchor":"miscellaneous","children":[]},{"title":"Gaya JavaScript","anchor":"javascript-style","children":[]}],"breadcrumbs":[{"docname":"internals/index","title":"Dalam Django","url":"/id/5.2/internals/"},{"docname":"internals/contributing/index","title":"Membantu untuk Django","url":"/id/5.2/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Kode bantuan","url":"/id/5.2/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/working-with-git","title":"Bekerja dengan Git dan GitHub","url":"/id/5.2/internals/contributing/writing-code/working-with-git/"},"next":{"docname":"internals/contributing/writing-code/javascript","title":"Kode JavaScript","url":"/id/5.2/internals/contributing/writing-code/javascript/"},"formats":{"html":"/id/5.2/internals/contributing/writing-code/coding-style/","markdown":"/id/5.2/internals/contributing/writing-code/coding-style.md","json":"/id/5.2/internals/contributing/writing-code/coding-style.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/internals/contributing/writing-code/coding-style.txt","official":"https://docs.djangoproject.com/id/5.2/internals/contributing/writing-code/coding-style/","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"]}