{"title":"Gaya pengkodean","version":"1.11","locale":"id","docname":"internals/contributing/writing-code/coding-style","url":"/id/1.11/internals/contributing/writing-code/coding-style/","canonical":"https://djangodocs.dev/id/1.11/internals/contributing/writing-code/coding-style/","summary":"Silahkan ikuti standar pengkodean ini ketika menulis kode untuk penyertaan di Django. Gaya Phyton Link to this heading # Silahkan sesuaikan pada gaya lekukan yang…","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=\"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>Silahkan sesuaikan pada gaya lekukan yang didikte dalam berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">.editorconfig</span></code>. Kami menganjurkan menggunakan pengubah teks dengan dukungan <a class=\"reference external\" href=\"http://editorconfig.org/\">EditorConfig</a> untuk menghindari masalah lekukan dan spasi putih. Berkas-berkas Python menggunakan 4 ruang kosong untuk lekukan dan berkas-berkas HTML menggunakan 2 ruang kosong .</p></li>\n<li><p>Meskipun sebaliknya ditentukan, ikuti <span class=\"target\" id=\"index-10\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a>.</p>\n<p>Gunakan <a class=\"reference external\" href=\"https://pypi.python.org/pypi/flake8\">flake8</a> untuk memeriksa masalah-maslaah dalam kawasan ini. Catat bahwa berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">setup.cfg</span></code> kami mengandung beberapa berkas tidak tersertakan (modul diusangkan kami tidak peduli tentang perapihan dan beberapa kode pihak-ketiga penjaja Django itu) sama halnya beberapa kesalahan yang tidak disertakan yang kami tidak pertimbangkan sebagai pelanggaran berat. Ingat bahwa <span class=\"target\" id=\"index-11\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> adalah hanya panduan, jadi hormati gaya dari kode sekelilingnya sebagai tujuan utama.</p>\n<p>Sebuah pengecualian pada <span class=\"target\" id=\"index-12\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> adalah aturan kami pada panjang baris. Jangan batasi baris kode sampai 79 karakter jika itu berarti kode terlihat sangat buruk atau sulit dibaca. Kami mengizinkan sampai 119 karakter karena ini adalah lebar dari tinjauan kode GitHub; apapun lebih panjang membutuhkan menggulung secara mendatar yang membuat tinjauan lebih sulit. Pemeriksaan ini disertakan ketika anda menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">flake8</span></code>. Dokumentasi, komentar, dan docstring harus dibungkus pada 79 karakter, meskipun <span class=\"target\" id=\"index-13\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a> menyarankan 72.</p>\n</li>\n<li><p>Gunakan empat ruang untuk lekukan.</p></li>\n<li><p>Gunakan empat ruang menggantung lekukan daripada penjajaran tegak lurus:</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\">raise</span> <span class=\"ne\">AttributeError</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Here is a multine error message &#39;</span>\n    <span class=\"s1\">&#39;shortened for clarity.&#39;</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Daripada:</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\">raise</span> <span class=\"ne\">AttributeError</span><span class=\"p\">(</span><span class=\"s1\">&#39;Here is a multine error message &#39;</span>\n                     <span class=\"s1\">&#39;shortened for clarity.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Hal ini membuat penggunaan ruang lebih baik dan menghindari memiliki penjajarkan kembali string jika panjang dari baris pertama berubah.</p>\n</li>\n<li><p>Gunakan kutipan tunggal untuk string, atau kutipan ganda jika string mengandung kutipan tunggal. Jangan membuang waktu melakukan refactoring yang tidak terkait dari kode yang ada untuk memastikan gaya ini.</p></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-14\"></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/1.11/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> 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> jadi anda dapat memeriksa pesan pengecualian. 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> hanya jika anda butuh pencocokan regular expression.</p></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</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=\"reference external\" href=\"https://github.com/timothycrosley/isort#readme\">isort</a> untuk mengotomatisasi pengurutan impor menggunakan panduan dibawah.</p>\n<p>Mulai cepat:</p>\n<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>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>isort\n<span class=\"gp\">$ </span>isort<span class=\"w\"> </span>-rc<span class=\"w\"> </span>.\n</code></pre></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, alfabetkan barang-barang dengan barang-barang huruf besar dikelompokkan sebelum barang-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=\"default\"><figcaption class=\"code-block-caption\"><code>django/contrib/admin/example.py</code></figcaption><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=\"django/contrib/admin/example.py\"><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> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseNotAllowed</span><span class=\"p\">,</span> <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=\"s1\">&#39;foo&#39;</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Example</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></figure>\n</li>\n<li><p>Gunakan manfaat impor kapanpun tersedia. Sebagai contoh, 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<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\"><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>\n    <span class=\"c1\"># ...</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>\n    <span class=\"c1\"># ...</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=\"s1\">&#39;people&#39;</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\">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    <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=\"s1\">&#39;people&#39;</span>\n</code></pre></div>\n<p>Jangan lakukan ini, salah satu:</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=\"s1\">&#39;people&#39;</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>Jika anda menentukan sebuah cara <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__</span></code> (sebelumnya <code class=\"docutils literal notranslate\"><span class=\"pre\">__unicode__</span></code> sebelum Python 3 disukung), hiasi kelas model dengan <a class=\"reference internal\" href=\"/id/1.11/ref/utils/#django.utils.encoding.python_2_unicode_compatible\" title=\"django.utils.encoding.python_2_unicode_compatible\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">python_2_unicode_compatible()</span></code></a>.</p></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></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>Jika <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> ditentukan untuk bidang model diberikan, tentukan setiap pilihan sebagai tuple dari tuple-tuple, dengan nama semua huruf besar sebagai atribut kelas pada model. Contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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=\"s1\">&#39;U&#39;</span>\n    <span class=\"n\">DIRECTION_DOWN</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;D&#39;</span>\n    <span class=\"n\">DIRECTION_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"n\">DIRECTION_UP</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Up&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">DIRECTION_DOWN</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Down&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</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>Konfigurasi manual dari pengaturan (yaitu bergantung pada variabel lingkungan DJANGO_SETTINGS_MODULE`) diizinkan dan dimungkinkan 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\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=\"s1\">&#39;foo&#39;</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/1.11/topics/i18n/\"><span class=\"doc\">i18n documentation</span></a> untuk rincian.</p></li>\n<li><p>Pindahkan pernyataan <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> yang tidak lagi digunakan ketika anda merubah kode. <a class=\"reference external\" href=\"https://pypi.python.org/pypi/flake8\">flake8</a> akan mencirikan impor ini untuk anda. Jika impor tidak digunakan butuh tinggal untuk kesesuaian kebelakang, tandai akhir dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">#</span> <span class=\"pre\">NOQA</span></code> untuk membisukan peringatan flake8.</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/1.11/internals/contributing/writing-code/javascript/\"><span class=\"doc\">JavaScript</span></a>.</p>\n</section>","rootId":"coding-style","toc":[{"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/1.11/internals/"},{"docname":"internals/contributing/index","title":"Membantu untuk Django","url":"/id/1.11/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/1.11/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/1.11/internals/contributing/writing-code/"},"next":{"docname":"internals/contributing/writing-code/unit-tests","title":"Satuan percobaan","url":"/id/1.11/internals/contributing/writing-code/unit-tests/"},"formats":{"html":"/id/1.11/internals/contributing/writing-code/coding-style/","markdown":"/id/1.11/internals/contributing/writing-code/coding-style.md","json":"/id/1.11/internals/contributing/writing-code/coding-style.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/internals/contributing/writing-code/coding-style.txt","official":"https://docs.djangoproject.com/id/1.11/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","fr","ja","id","pt-br","ko","es","el","pl"]}