{"title":"Gaya pengkodean","version":"1.9","locale":"id","docname":"internals/contributing/writing-code/coding-style","url":"/id/1.9/internals/contributing/writing-code/coding-style/","canonical":"https://djangodocs.dev/id/1.9/internals/contributing/writing-code/coding-style/","summary":"Please follow these coding standards when writing code for inclusion in Django. Please conform to the indentation style dictated in the.editorconfig file.","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>Please follow these coding standards when writing code for inclusion in Django.</p>\n<section id=\"python-style\">\n<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>Please conform to the indentation style dictated in the <code class=\"docutils literal notranslate\">.editorconfig</code>\nfile. We recommend using a text editor with <a class=\"reference external\" href=\"http://editorconfig.org/\">EditorConfig</a> support to avoid\nindentation and whitespace issues. The Python files use 4 spaces for\nindentation and the HTML files use 2 spaces.</p></li>\n<li><p>Unless otherwise specified, follow <span class=\"target\" id=\"index-0\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0008/\"><strong>PEP 8</strong></a>.</p>\n<p>Use <a class=\"reference external\" href=\"https://pypi.python.org/pypi/flake8\">flake8</a> to check for problems in this area. Note that our <code class=\"docutils literal notranslate\">setup.cfg</code>\nfile contains some excluded files (deprecated modules we don't care about\ncleaning up and some third-party code that Django vendors) as well as some\nexcluded errors that we don't consider as gross violations. Remember that\n<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 as a\nprimary 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 119 characters as this is the width of GitHub\ncode review; anything longer requires horizontal scrolling which makes review\nmore difficult. 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>Gunakan empat ruang untuk lekukan.</p></li>\n<li><p>Gunakan garis bawah, bukan camelCase, untuk variabel, fungsi dan nama-nama cara (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>Use <code class=\"docutils literal notranslate\">InitialCaps</code> for class names (or for factory functions that\nreturn classes).</p></li>\n<li><p>Dalam docstring, ikuti <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0257/\"><strong>PEP 257</strong></a>. Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">foo</span><span class=\"p\">():</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Calculate something and return the result.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</li>\n<li><p>In tests, use <a class=\"reference internal\" href=\"/id/1.9/topics/testing/tools/#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\">assertRaisesMessage()</code></a> instead\nof <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> so you can check the exception\nmessage. Use <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>\n(<code class=\"docutils literal notranslate\">six.assertRaisesRegex()</code> as long as we support Python 2) only if you need\nto use regular expression matching.</p></li>\n</ul>\n</section>\n<section id=\"imports\">\n<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 install isort\n<span class=\"gp\">$ </span>isort -rc .\n</code></pre></div>\n<p>This runs <code class=\"docutils literal notranslate\">isort</code> recursively from your current directory, modifying any\nfiles that don't conform to the guidelines. If you need to have imports out\nof order (to avoid a circular import, for example) use a comment like 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\">import</span> <span class=\"nn\">module</span>  <span class=\"c1\"># isort:skip</span>\n</code></pre></div>\n</li>\n<li><p>Put imports in these groups: future, standard library, third-party libraries,\nother Django components, local Django component, try/excepts. Sort lines in\neach group alphabetically by the full module name. Place all <code class=\"docutils literal notranslate\">import module</code>\nstatements before <code class=\"docutils literal notranslate\">from module import objects</code> in each section. Use absolute\nimports for other Django components and relative imports for local components.</p></li>\n<li><p>On each line, alphabetize the items with the upper case items grouped before\nthe lower case items.</p></li>\n<li><p>Break long lines using parentheses and indent continuation lines by 4 spaces.\nInclude a trailing comma after the last import and put the closing\nparenthesis on its own line.</p>\n<p>Use a single blank line between the last import and any module level code,\nand use two blank lines above the first function or class.</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=\"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> HttpResponse<span class=\"p\">,</span> HttpResponseNotAllowed<span class=\"p\">,</span> 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\">pytz</span>\n<span class=\"k\">except</span> <span class=\"ne\">ImportError</span><span class=\"p\">:</span>\n    pytz <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\nCONSTANT <span class=\"o\">=</span> <span class=\"s1\">&#39;foo&#39;</span>\n\n\n<span class=\"k\">class</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>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.generic</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>\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=\"nf\">my_view</span><span class=\"p\">(</span>req<span class=\"p\">,</span> foo<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=\"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>The <code class=\"docutils literal notranslate\">class Meta</code> should appear <em>after</em> the fields are defined, with\na single blank line separating the fields and the class definition.</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=\"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=\"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    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        verbose_name_plural <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=\"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=\"s1\">&#39;people&#39;</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>If you define a <code class=\"docutils literal notranslate\">__str__</code> method (previously <code class=\"docutils literal notranslate\">__unicode__</code> before Python 3\nwas supported), decorate the model class with\n<a class=\"reference internal\" href=\"/id/1.9/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\">python_2_unicode_compatible()</code></a>.</p></li>\n<li><p>The order of model inner classes and standard methods should be as\nfollows (noting that these are not all required):</p>\n<ul class=\"simple\">\n<li><p>Semua bidang basisdata</p></li>\n<li><p>Custom manager attributes</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\na tuple of tuples, with an all-uppercase name as a class attribute on the\nmodel. Example:</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=\"s1\">&#39;U&#39;</span>\n    DIRECTION_DOWN <span class=\"o\">=</span> <span class=\"s1\">&#39;D&#39;</span>\n    DIRECTION_CHOICES <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span>DIRECTION_UP<span class=\"p\">,</span> <span class=\"s1\">&#39;Up&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span>DIRECTION_DOWN<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\">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>Modules should not in general use settings stored in <code class=\"docutils literal notranslate\">django.conf.settings</code>\nat the top level (i.e. evaluated when the module is imported). The explanation\nfor this is as follows:</p>\n<p>Manual configuration of settings (i.e. not relying on the\n<code class=\"docutils literal notranslate\">DJANGO_SETTINGS_MODULE</code> environment variable) is allowed and possible as\nfollows:</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=\"s1\">&#39;foo&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>However, if any setting is accessed before the <code class=\"docutils literal notranslate\">settings.configure</code> line,\nthis will not work. (Internally, <code class=\"docutils literal notranslate\">settings</code> is a <code class=\"docutils literal notranslate\">LazyObject</code> which\nconfigures itself automatically when the settings are accessed if it has not\nalready been configured).</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.core.urlresolvers</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>...then importing this module will cause the settings object to be configured.\nThat means that the ability for third parties to import the module at the top\nlevel is incompatible with the ability to configure the settings object\nmanually, or makes it very difficult in some circumstances.</p>\n<p>Instead of the above code, a level of laziness or indirection must be used,\nsuch as <code class=\"docutils literal notranslate\">django.utils.functional.LazyObject</code>,\n<code class=\"docutils literal notranslate\">django.utils.functional.lazy()</code> or <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>Mark all strings for internationalization; see the <a class=\"reference internal\" href=\"/id/1.9/topics/i18n/\"><span class=\"doc\">i18n\ndocumentation</span></a> for details.</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=\"reference external\" href=\"https://pypi.python.org/pypi/flake8\">flake8</a> will identify these imports for you. If an unused import needs to\nremain 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>Systematically remove all trailing whitespaces from your code as those\nadd unnecessary bytes, add visual clutter to the patches and can also\noccasionally cause unnecessary merge conflicts. Some IDE's can be\nconfigured to automatically remove them and most VCS tools can be set to\nhighlight them in diff outputs.</p></li>\n<li><p>Please don't put your name in the code you contribute. Our policy is to\nkeep contributors' names in the <code class=\"docutils literal notranslate\">AUTHORS</code> file distributed with Django\n-- not scattered throughout the codebase itself. Feel free to include a\nchange to the <code class=\"docutils literal notranslate\">AUTHORS</code> file in your patch if you make more than a\nsingle trivial change.</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.9/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.9/internals/"},{"docname":"internals/contributing/index","title":"Membantu untuk Django","url":"/id/1.9/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/1.9/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/1.9/internals/contributing/writing-code/"},"next":{"docname":"internals/contributing/writing-code/unit-tests","title":"Satuan percobaan","url":"/id/1.9/internals/contributing/writing-code/unit-tests/"},"formats":{"html":"/id/1.9/internals/contributing/writing-code/coding-style/","markdown":"/id/1.9/internals/contributing/writing-code/coding-style.md","json":"/id/1.9/internals/contributing/writing-code/coding-style.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/internals/contributing/writing-code/coding-style.txt","official":"https://docs.djangoproject.com/id/1.9/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","es"]}