{"title":"Gaya pengkodean","version":"5.0","locale":"id","docname":"internals/contributing/writing-code/coding-style","url":"/id/5.0/internals/contributing/writing-code/coding-style/","canonical":"https://djangodocs.dev/id/5.0/internals/contributing/writing-code/coding-style/","summary":"Silahkan ikuti standar pengkodean ini ketika menulis kode untuk penyertaan di Django.","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\">pre-commit</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 -m pip install pre-commit\n<span class=\"gp\">$ </span>pre-commit 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\">pre-commit</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\">black</code> or <code class=\"docutils literal notranslate\">isort</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=\"reference external\" href=\"https://black.readthedocs.io/en/stable/\">black</a> auto-formatter. This will be\nrun by <code class=\"docutils literal notranslate\">pre-commit</code> if that is configured.</p></li>\n<li><p>The project repository includes an <code class=\"docutils literal notranslate\">.editorconfig</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-8\"></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\">setup.cfg</code> file contains some excluded files (deprecated modules we don't\ncare about cleaning up and some third-party code that Django vendors) as well\nas some excluded errors that we don't consider as gross violations. Remember\nthat <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 the surrounding code\nas 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\">black</code>. This check is included when you run <code class=\"docutils literal notranslate\">flake8</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\">str.format()</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>user<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>user<span class=\"o\">.</span>name<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>user<span class=\"o\">.</span>name<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>get_user<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>user<span class=\"o\">.</span>age <span class=\"o\">*</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>\nuser <span class=\"o\">=</span> get_user<span class=\"p\">()</span>\n<span class=\"sa\">f</span><span class=\"s2\">&quot;hello </span><span class=\"si\">{</span>user<span class=\"si\">}</span><span class=\"s2\">&quot;</span>\nuser_days_old <span class=\"o\">=</span> user<span class=\"o\">.</span>age <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>user_days_old<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\">format()</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\">poll.get_unique_voters()</code>, bukan <code class=\"docutils literal notranslate\">poll.getUniqueVoters()</code>).</p></li>\n<li><p>Gunakan <code class=\"docutils literal notranslate\">InitialCaps</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-9\"></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.0/topics/testing/tools/#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\">assertRaisesMessage()</code></a> dan <a class=\"reference internal\" href=\"/id/5.0/topics/testing/tools/#django.test.SimpleTestCase.assertWarnsMessage\" title=\"django.test.SimpleTestCase.assertWarnsMessage\"><code class=\"xref py py-meth docutils literal notranslate\">assertWarnsMessage()</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\">assertRaises()</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\">assertWarns()</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\">assertRaisesRegex()</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\">assertWarnsRegex()</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\">assertIs(…, True/False)</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\">assertTrue()</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\">assertFalse()</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=\"nf\">test_foo</span><span class=\"p\">():</span>\n    <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</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>Use <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/isort/\">isort</a> to automate import sorting using the guidelines below.</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 -m pip install <span class=\"s2\">&quot;isort &gt;= 5.1.0&quot;</span>\n<span class=\"gp\">$ </span>isort .\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;= 5.1.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\">isort</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=\"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\">import module</code> sebelum <code class=\"docutils literal notranslate\">from module import objects</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\">django/contrib/admin/example.py</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=\"nn\">__future__</span> <span class=\"kn\">import</span> unicode_literals\n\n<span class=\"c1\"># standard library</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">itertools</span> <span class=\"kn\">import</span> chain\n\n<span class=\"c1\"># third-party</span>\n<span class=\"kn\">import</span> <span class=\"nn\">bcrypt</span>\n\n<span class=\"c1\"># Django</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> Http404\n<span class=\"kn\">from</span> <span class=\"nn\">django.http.response</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n    Http404<span class=\"p\">,</span>\n    HttpResponse<span class=\"p\">,</span>\n    HttpResponseNotAllowed<span class=\"p\">,</span>\n    StreamingHttpResponse<span class=\"p\">,</span>\n    cookie<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=\"nn\">.models</span> <span class=\"kn\">import</span> LogEntry\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=\"nn\">yaml</span>\n<span class=\"k\">except</span> <span class=\"ne\">ImportError</span><span class=\"p\">:</span>\n    yaml <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\nCONSTANT <span class=\"o\">=</span> <span class=\"s2\">&quot;foo&quot;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Example</span><span class=\"p\">:</span> <span class=\"o\">...</span>\n</code></pre></figure>\n</li>\n<li><p>Use convenience imports whenever available. For example, do this</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.views</span> <span class=\"kn\">import</span> View\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=\"nn\">django.views.generic.base</span> <span class=\"kn\">import</span> View\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<ul>\n<li><p>Di kode cetakan Django, taruh satu (dan hanya satu) spasi diantara kurung keriting dan etiket isi.</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\">foo</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\">foo</span><span class=\"cp\">}}</span>\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\">request</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=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">,</span> foo<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=\"nf\">my_view</span><span class=\"p\">(</span>req<span class=\"p\">,</span> foo<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=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<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=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    FirstName <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    Last_Name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<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\">class Meta</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=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        verbose_name_plural <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=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        verbose_name_plural <span class=\"o\">=</span> <span class=\"s2\">&quot;people&quot;</span>\n\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<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\">class Meta</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">def __str__()</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">def save()</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">def get_absolute_url()</code></p></li>\n<li><p>Cara penyesuaian apapun</p></li>\n</ul>\n</li>\n<li><p>If <code class=\"docutils literal notranslate\">choices</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=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    DIRECTION_UP <span class=\"o\">=</span> <span class=\"s2\">&quot;U&quot;</span>\n    DIRECTION_DOWN <span class=\"o\">=</span> <span class=\"s2\">&quot;D&quot;</span>\n    DIRECTION_CHOICES <span class=\"o\">=</span> <span class=\"p\">{</span>\n        DIRECTION_UP<span class=\"p\">:</span> <span class=\"s2\">&quot;Up&quot;</span><span class=\"p\">,</span>\n        DIRECTION_DOWN<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>Alternatively, consider using <a class=\"reference internal\" href=\"/id/5.0/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=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Direction</span><span class=\"p\">(</span>models<span class=\"o\">.</span>TextChoices<span class=\"p\">):</span>\n        UP <span class=\"o\">=</span> <span class=\"s2\">&quot;U&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Up&quot;</span>\n        DOWN <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\">django.conf.settings</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\">django.conf.settings</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-5\"></span><a class=\"reference internal\" href=\"/id/5.0/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\">DJANGO_SETTINGS_MODULE</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=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n\nsettings<span class=\"o\">.</span>configure<span class=\"p\">({},</span> SOME_SETTING<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\">settings.configure</code>, ini tidak akan bekerja (Secara internal, <code class=\"docutils literal notranslate\">settings</code> adalah <code class=\"docutils literal notranslate\">LazyObject</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=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> get_callable\n\ndefault_foo_view <span class=\"o\">=</span> get_callable<span class=\"p\">(</span>settings<span class=\"o\">.</span>FOO_VIEW<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\">django.utils.functional.LazyObject</code>, <code class=\"docutils literal notranslate\">django.utils.functional.lazy()</code> atau <code class=\"docutils literal notranslate\">lambda</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.0/topics/i18n/\"><span class=\"doc\">i18n documentation</span></a> untuk rincian.</p></li>\n<li><p>Remove <code class=\"docutils literal notranslate\">import</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\"># NOQA</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\">AUTHORS</code> disalurkan dengan Django -- bukan goresan melalui basis kode itu sendiri. Merasa bebas untuk menyertakan perubahan pada berkas <code class=\"docutils literal notranslate\">AUTHORS</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.0/internals/contributing/writing-code/javascript/\"><span class=\"doc\">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.0/internals/"},{"docname":"internals/contributing/index","title":"Membantu untuk Django","url":"/id/5.0/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/5.0/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/5.0/internals/contributing/writing-code/"},"next":{"docname":"internals/contributing/writing-code/unit-tests","title":"Satuan percobaan","url":"/id/5.0/internals/contributing/writing-code/unit-tests/"},"formats":{"html":"/id/5.0/internals/contributing/writing-code/coding-style/","markdown":"/id/5.0/internals/contributing/writing-code/coding-style.md","json":"/id/5.0/internals/contributing/writing-code/coding-style.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/internals/contributing/writing-code/coding-style.txt","official":"https://docs.djangoproject.com/id/5.0/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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}