{"title":"Menulis aplikasi Django pertama anda, bagian 1","version":"1.11","locale":"id","docname":"intro/tutorial01","url":"/id/1.11/intro/tutorial01/","canonical":"https://djangodocs.dev/id/1.11/intro/tutorial01/","summary":"Mari kita belajar berdasarkan contoh. Melalui tutorial ini, kami akan memandu anda melalui pembuatan aplikasi jejak pendapat dasar. Dia akan terdiri dari dua…","html":"<h1>Menulis aplikasi Django pertama anda, bagian 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Mari kita belajar berdasarkan contoh.</p>\n<p>Melalui tutorial ini, kami akan memandu anda melalui pembuatan aplikasi jejak pendapat dasar.</p>\n<p>Dia akan terdiri dari dua bagian:</p>\n<ul class=\"simple\">\n<li><p>Situs umum yang membiarkan orang melihat jejak pendapat dan memilih mereka.</p></li>\n<li><p>Situs admin yang membiarkan anda menambah, merubah, dan menghapus jejak pendapat.</p></li>\n</ul>\n<p>Kami akan beranggapan anda telah mempunyai <a class=\"reference internal\" href=\"/id/1.11/intro/install/\"><span class=\"doc\">Django installed</span></a>. Anda dapat memberitahu Django terpasang dan versi mana dengan menjalankan perintah berikut dalam sebuah shell prompt (ditunjukkan oleh awalan $):</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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>django<span class=\"w\"> </span>--version\n</code></pre></div>\n<p>Jika Django telah terpasang, anda harus melihat versi dari pemasangan anda. Jika dia tidak, anda akan mendapatkan kesalahan mengatakan &quot;Tidak ada modul bernama django&quot;.</p>\n<p>Tutorial ini ditulis untuk Django 1.11 dan Phyton 3.4 atau kemudian. Jika versi DJango tidak cocok, anda dapat mengacu ke tutorial untuk versi Django anda dengan menggunakan pengganti versi di pojok bawah kanan halaman ini, atau perbaharui Django ke versi terbaru. Jika anda masih menggunakan Phyton 2.7, anda akan butuh menyesuaikan sedikit contoh kode , seperti digambarkan di komentar.</p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/1.11/topics/install/\"><span class=\"doc\">How to install Django</span></a> untuk saran bagaimana memindahkan versi lama Django dan memasang satu yang baru.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Dimana mendapatkan bantuan:</p>\n<p>Jika anda sedang mempunyai masalah melalui tutorial ini, silahkan tempatkan pesan ke  <a class=\"reference internal\" href=\"/id/1.11/internals/mailing-lists/#django-users-mailing-list\"><span class=\"std std-ref\">django-users</span></a> atau jatuhkan dengan  <a class=\"reference external\" href=\"irc://irc.freenode.net/django\">#django on irc.freenode.net</a> untuk mengobrol dengan pengguna Django lain yang mungkin dapat membantu.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Membuat proyek<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Jika ini adalah pertama kali anda menggunakan Django, anda harus berhati-hati dari beberapa pengaturan awal. Yaitu, anda butuh membangkitkan-otomatis beberapa kode yang membangun Django <a class=\"reference internal\" href=\"/id/1.11/glossary/#term-project\"><span class=\"xref std std-term\">project</span></a> -- kumpulan dari pengaturan untuk contoh DJango, termasuk konfigurasi basisdata, pilihan khusus-Django dan pengaturan khusus-aplikasi.</p>\n<p>Dari baris perintah, <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> kedalam direktori dimana anda ingin menyimpan kode anda, lalu jalankan perintah berikut:</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>django-admin<span class=\"w\"> </span>startproject<span class=\"w\"> </span>mysite\n</code></pre></div>\n<p>Ini akan membuat direktori <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> di direktori anda saat ini. Jika itu tidak bekerja, lihat <a class=\"reference internal\" href=\"/id/1.11/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Masalah menjalankan django-admin</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Anda akan butuh menghindari penamaan proyek setelah memasang-tetap komponen Phyton atau Django. Khususnya, ini berarti anda harus menghindari menggunakan nama seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (yang akan bertentangan dengan Django itu sendiri) atau <code class=\"docutils literal notranslate\"><span class=\"pre\">test</span></code> (yang bertentangan dengan paket Phyton memasang-tetap).</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\">\n<p class=\"admonition-title\">Dimana seharusnya kode ini tinggal?</p>\n<p>Jika latar belakang anda adalah di PHP lama polos (dengan tidak menggunakan kerangka modern), anda mungkin terbiasa menaruh kode dibawah akar dokumen peladen Jaringan (di tempat seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">/var/www</span></code>). Dengan Django, anda tidak melakukannya. Ini bukan ide bagus menaruh kode Phyton apapun didalam akar dokumen peladen Jaringan, karena itu beresiko kemungkinan bahwa orang mungkin dapat melihat kode di atas jaringan. Itu tidak bagus untuk keamanan.</p>\n<p>Taruh kode anda di beberapa direktori <strong>diluar</strong> akar dokumen, seperti <code class=\"file docutils literal notranslate\"><span class=\"pre\">/home/mycode</span></code>.</p>\n</aside>\n<p>Mari kita lihat seperti apa <a class=\"reference internal\" href=\"/id/1.11/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></code></a> dibuat:</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=\"n\">mysite</span><span class=\"o\">/</span>\n    <span class=\"n\">manage</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">mysite</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">wsgi</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>Berkas ini adalah:</p>\n<ul class=\"simple\">\n<li><p>Direktori akar <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> paling luar hanya mengandung untuk proyek anda. Namanya tidak masalah bagi Django; anda dapat menamai kembali ke apapun anda suka.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>: Sebuah kegunaan baris-perintah yang membiarkan anda berinteraksi dengan proyek Django ono di beragam jalan. Anda dapat membaca semua rincian tentang <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> di <a class=\"reference internal\" href=\"/id/1.11/ref/django-admin/\"><span class=\"doc\">django-admin dan manage.py</span></a>.</p></li>\n<li><p>Direktori <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/</span></code> sebelah dalam adalah paket Phyton sesungguhnya untuk proyek anda. Namanya adalah nama paket Phyton anda akan butuh untuk digunakan mengimpor apapun didalamnya (sebagai contoh <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.urls</span></code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/__init__.py</span></code>: Sebuah berkas kosong yang memberitahu Python bahwa pelipat ini harus mempertimbangkan paket Python. Jika anda adalah pemula Python, baca <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">more about packages</span></a> di dokumen resmi Python.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code>: Pengaturan/konfigurasi untuk proyek Django ini. <a class=\"reference internal\" href=\"/id/1.11/topics/settings/\"><span class=\"doc\">Pengaturan Django</span></a> akan mengatakan anda semua tentang bagaimana pengaturan bekerja.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code>: Deklarasi URL untuk proyek Django ini; &quot;tabel isi&quot; dari situs Ditenagai-Django anda. Anda dapat membaca lebih tentang URL di <a class=\"reference internal\" href=\"/id/1.11/topics/http/urls/\"><span class=\"doc\">Pengirim URL</span></a>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite/wsgi.py</span></code>: Sebuah titik-masukan untuk peladen jaringan sesuai-WSGI untuk meladeni proyek anda. Lihat <a class=\"reference internal\" href=\"/id/1.11/howto/deployment/wsgi/\"><span class=\"doc\">Bagaimana menyebarkan dengan WSGI</span></a> untuk lebih rinci.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>Peladen pengembangan<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mari kita periksa proyek Django anda bekerja. Perubahan di dalam direktori <code class=\"file docutils literal notranslate\"><span class=\"pre\">mysite</span></code> terluar, jika anda belum siap, dan jalankan perintah berikut:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>Anda akan melihat keluaran berikut pada baris perintah:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 Agu, 2026 - 15:50:53\nDjango version 1.11, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Abaikan peringatan tentang perpindahan basisdata tidak diberlakukan untuk sekarang; kami akan berurusan dengan basisdata segera.</p>\n</aside>\n<p>Anda telah memulai peladen pengembangan Django, peladen Jaringan ringan ditulis murni di Phyton. Kami telah memasukkan ini dengan Django sehingga anda dapat mengembangkan hal dengan cepat, tanpa harus berurusan dengan konfigurasi peladen produksi -- seperti Apache -- sampai anda siap untuk produksi.</p>\n<p>Sekarang adalah waktu bagus untuk mencatat <strong>jangan</strong> gunakan peladen ini dalam menyerupai apapun lingkungan produksi. Ini hanya diperuntukkan untuk digunakan selama pengembangan. (Kami didalam bisnis pembuatan kerangka jaringan, bukan peladen Jaringan.)</p>\n<p>Sekarang peladen sedang berjalan, kunjungi <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> dengan perambah jaringan anda. Anda akan melihat halaman &quot;Selamat datang ke Django&quot;, dalam nyaman, pastel cahaya-bitu. Dia bekerja!</p>\n<aside class=\"admonition-changing-the-port admonition\">\n<p class=\"admonition-title\">Merubah pangkalan</p>\n<p>Secara awal, perintah <a class=\"reference internal\" href=\"/id/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> memulai peladen pengembangan di IP internal pada pangkalan 8000.</p>\n<p>Jika anda ingin merubah pangkalan peladen, lewati sebagai penjelasan baris-perintah. Sebagai contoh, perintah ini menyalakan peladan pada pangkalan 8080:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">8080</span>\n</code></pre></div>\n<p>Jika anda ingin merubah IP peladen, lewatkan bersama dengan pangkalan. Jadi untuk mendengar semua IP umum (berguna jika anda ingin sedang menjalankan Vagrant atau ingin menunjukkan pekerjaan anda pada komputer lain pada jaringan), gunakan:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver<span class=\"w\"> </span><span class=\"m\">0</span>:8000\n</code></pre></div>\n<p><strong>0</strong> adalah sebuah jalan pintas untuk <strong>0.0.0.0</strong>. Dokumentasi penuh untuk peladen pengembangan dapat ditemukan dalam acuan <a class=\"reference internal\" href=\"/id/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a>.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\">\n<p class=\"admonition-title\">Otomatis memuat kembali <a class=\"reference internal\" href=\"/id/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a></p>\n<p>Peladen pengembangan otomatis memuat kembali kode Phyton untuk setiap permintaan sesuai kebutuhan. Anda tidak butuh memulai kembali peladen untuk perubahan kode agar berpengaruh. Bagaimanapun, beberapa tindakan seperti menambahkan berkas tidak akan memicu mulai kembali, sehingga anda harus memulai kembali peladen dalam kasus ini.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Membuat aplikasi jejak pendapat<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang bahwa lingkungan anda -- sebuah &quot;proyek&quot; -- sedang diatur, anda sudah untuk siap memulai pekerjaan.</p>\n<p>Setiap aplikasi anda tulis dalam Django terdiri dari paket Phyton yang mengikuti ketentuan tertentu Django datang dengan kegunaan yang otomatis membangkitkan struktur direktori dasar dari sebuah aplikasi, sehingga anda dapat fokus pada menulis kode daripada membuat direktori.</p>\n<aside class=\"admonition-projects-vs-apps admonition\">\n<p class=\"admonition-title\">Proyek lawan aplikasi</p>\n<p>Apa perbedaan diantara sebuah proyek dan sebuah aplikasi? Sebuah aplikasi adalah aplikasi Jaringan yang melakukan sesuatu -- sebagai contoh sistem catatan jaringan, basisdata dari rekaman umum atau aplikasi jejak pendapat sederhana. Sebuah proyek adalah  kumpulan dari konfigurasi dan aplikasi untuk situs jaringan tertentu. Sebuah proyek dapat mengandung banyak aplikasi. Sebuah aplikasi dapat berada di banyak proyek.</p>\n</aside>\n<p>Aplikasi anda dapat tinggal dimana saja pada <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a> anda. Di tutorial ini, kami akan membuat jejak pendapat kami dekat berkas <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> anda sehingga itu dapat diimpor sebagai modul tingkat-atas sendiri, daripada submodul dari <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code>.</p>\n<p>Untuk membuat aplikasi anda, pastikan anda berada di direktori sama sebagai <code class=\"file docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> dan ketik perintah ini:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>startapp<span class=\"w\"> </span>polls\n</code></pre></div>\n<p>Itu akan membuat direktori <code class=\"file docutils literal notranslate\"><span class=\"pre\">polls</span></code>, yang ditata 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=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>Struktur direktori ini akan merumahkan aplikasi jejak pendapat.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Tulis tampilan pertama anda<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mari kita menulis tampilan pertama. Buka berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/views.py</span></code> dan taruh kode Phyton berikut didalamnya:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/views.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=\"polls/views.py\"><code><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\">HttpResponse</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Ini adalah kemungkinan tampilan sederhana di Django. Untuk memanggil tampilan, kami butuh memetakannya ke URL - dan untuk ini kami butuh URLconf.</p>\n<p>Untuk membuat URLconf dalam direktori jejak pendapat, buat berkas disebut <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>. Direktori aplikasi anda seharusnya kelihatan seperti:</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=\"n\">polls</span><span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">migrations</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">tests</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">urls</span><span class=\"o\">.</span><span class=\"n\">py</span>\n    <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>Di berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code> sertakan kode berikut:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/urls.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=\"polls/urls.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">url</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Langkah selanjutnya adalah menunjuk akar URLconf pada modul <code class=\"docutils literal notranslate\"><span class=\"pre\">polls.urls</span></code>. Dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/urls.py</span></code>, tambahkan impor untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.urls.include</span></code> dan masukkan sebuah <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> di daftar <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code>, jadi anda mempunyai:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>mysite/urls.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=\"mysite/urls.py\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">url</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^polls/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Fungsi <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> mengizinkan memberi petunjuk URLconf lain. Catat bahwa regular expression untuk fungsi <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> tidak mempunyai sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> (karakter cocok end-of-string) tetapi daripada garis miring. Kapanpun Django menjumpai <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a>, dia memotong apapun bagian dari URL dicocokkan ke titik itu dan mengirim deretan karakter tersisi ke URLconf disertakan untuk pengolahan lebih lanjut.</p>\n<p>Ide dibelakang <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a> adalah membuatnya mudah untuk pasang-dan-main URL. Sejak jejak pendapat berada di URLconf sendiri (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/urls.py</span></code>), mereka dapat ditempatkan dibawah &quot;/polls/&quot;, atau dibawah &quot;/fun_polls/&quot;, atau dibawah &quot;/content/polls/&quot;, atau jalur akar lain, dan aplikasi akan masih bekerja.</p>\n<aside class=\"admonition-when-to-use-func-django-conf-urls-include admonition\">\n<p class=\"admonition-title\">Kapan menggunakan <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a></p>\n<p>Anda harus selalu menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">include()</span></code> ketika anda menyertakan pola URL lain. <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code> hanya pengecualian untuk ini.</p>\n</aside>\n<aside class=\"admonition-doesn-t-match-what-you-see admonition\">\n<p class=\"admonition-title\">Tidak cocok apa yang anda lihat?</p>\n<p>Jika anda sedang melihat <code class=\"docutils literal notranslate\"><span class=\"pre\">include(admin.site.urls)</span></code> dari pada hanya <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.site.urls</span></code>, anda sedang mungkin menggunakan versi Django yang tidak cocok untuk versi tutorial ini. Anda akan ingin mengganti ke tutorial Django versi lama atau baru.</p>\n</aside>\n<p>Anda sekarang telah mengikat sebuah tampilan <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> kedalam URLconf. Mari kita periksa dia bekerja, jalankan perintah berikut:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>Pergi ke <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> di perambah anda, dan anda seharusnya melihat teks &quot;<em>Halo, dunia. Anda sedang berada di index jejak pendapat.</em>&quot;, yang anda tentukan di tampilan <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code>.</p>\n<p>Fungsi <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> dilewati empat argumen, dua wajib: <code class=\"docutils literal notranslate\"><span class=\"pre\">regex</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code>, dan dua pilihan: <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>. Pada titik ini, sangatlah bernilai meninjau kembali untuk apa argumen ini.</p>\n<section id=\"url-argument-regex\">\n<h3><a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> argument: regex<a class=\"heading-anchor\" href=\"#url-argument-regex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Istilah &quot;regex&quot; adalah umum digunakan bentuk pendek berarti &quot;regular expression&quot;, yang merupakan sintaksis untuk corak pencocokan di deretan karakter, atau di kasus ini, corak url. Django memulai regular expression pertama dan membuatnya turun ke bawah, membandingkan URL diminta terhadap setiap regular expression sampai dia menemukan satu yang cocok.</p>\n<p>Catat bahwa regular expression ini tidak mencari parameter GET dan POST, atai nama ranah. Sebagai contoh, di permintaan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/</span></code>, URLconf akan mencari <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code>. Di permintaan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">https://www.example.com/myapp/?page=3</span></code>, URLconf akan juga mencari untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/</span></code>.</p>\n<p>Jika anda butuh bantuan dengan regular expression, lihat <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Regular_expression\">masukan Wikipedia</a> dan dokumentasi dari modul <a class=\"reference external\" href=\"https://docs.python.org/3/library/re.html#module-re\" title=\"(di Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">re</span></code></a>. Juga, buku O'Reilly &quot;Mastering Regular Expressions&quot; oleh Jeffrey Friedl sungguh hebat. Dalam praktiknya, bagaimanapun, anda tidak butuh menjadi ahli di regular expression, anda hanya butuh mengetahui bagaimana mengambil corak sederhana. Faktanya, regular expression rumit dapat mempunyai penampilan pencarian buruk, jadi anda mungkin jangan bergantung pada kekuatan penuh dari regex.</p>\n<p>Akhirnya, catatan penampilan: regular expression ini disusun pertama kali modul URLconf dimuat. Mereka sangat cepat (selama pencarian tidak terlalu rumit seperti catatan diatas).</p>\n</section>\n<section id=\"url-argument-view\">\n<h3>Tampilan <a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> argument:<a class=\"heading-anchor\" href=\"#url-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ketika Django menemukan kecocokan regular expression, Django memanggil fungsi tampilan yang ditentukan dengan obyek <a class=\"reference internal\" href=\"/id/1.11/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> sebagai argumen pertama dan nilai &quot;tertangkap&quot; apapun dari regular expression sebagai argumen lain. Jika regex menggunakan penangkapan sederhana, nilai dilewatkan sebagai argumen penempatan; jika dia menggunakan penangkapan nama, nilai dilewatkan sebagai argumen kata kunci. Kami akan memberikan sebuah contoh dari ini sedikit.</p>\n</section>\n<section id=\"url-argument-kwargs\">\n<h3><a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> argument: kwargs<a class=\"heading-anchor\" href=\"#url-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Argumen kata kunci yang berubah-ubah dapat dilewatkan di kamus ke tampilan sasaran. Kami tidak akan menggunakan fitur Django ini di tutorial ini.</p>\n</section>\n<section id=\"url-argument-name\">\n<h3><a class=\"reference internal\" href=\"/id/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> argument: name<a class=\"heading-anchor\" href=\"#url-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Menamai URL anda membiarkan anda menunjuk ke kejelasannya dari di tempat lain di Django, khususnya dari dalam cetakan. Fitur kuat ini mengizinkan anda membuat perubahan global pada corak URL dari proyek anda selagi hanya menyentuh berkas tunggal.</p>\n<p>Ketika anda nyaman dengan permintaan dasar dan aliran tanggapan, baca <a class=\"reference internal\" href=\"/id/1.11/intro/tutorial02/\"><span class=\"doc\">bagian 2 dari tutorial ini</span></a> utuk memulai bekerja dengan basisdata.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Membuat proyek","anchor":"creating-a-project","children":[]},{"title":"Peladen pengembangan","anchor":"the-development-server","children":[]},{"title":"Membuat aplikasi jejak pendapat","anchor":"creating-the-polls-app","children":[]},{"title":"Tulis tampilan pertama anda","anchor":"write-your-first-view","children":[{"title":"url() argument: regex","anchor":"url-argument-regex","children":[]},{"title":"Tampilan url() argument:","anchor":"url-argument-view","children":[]},{"title":"url() argument: kwargs","anchor":"url-argument-kwargs","children":[]},{"title":"url() argument: name","anchor":"url-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Mulai","url":"/id/1.11/intro/"}],"prev":{"docname":"intro/install","title":"Panduan pasang cepat","url":"/id/1.11/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Menulis aplikasi Django kedua anda, bagian 2","url":"/id/1.11/intro/tutorial02/"},"formats":{"html":"/id/1.11/intro/tutorial01/","markdown":"/id/1.11/intro/tutorial01.md","json":"/id/1.11/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/id/1.11/intro/tutorial01/","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"]}