{"title":"Menulis aplikasi Django pertama anda, bagian 3","version":"3.0","locale":"id","docname":"intro/tutorial03","url":"/id/3.0/intro/tutorial03/","canonical":"https://djangodocs.dev/id/3.0/intro/tutorial03/","summary":"Tutorial ini mulai dimana Tutorial 2 tinggalkan. Kami sedang melanjutkan aplikasi jejak pendapat jaringan dan akan fokus membuat antarmuka umum -- \"tampilan\".","html":"<h1>Menulis aplikasi Django pertama anda, bagian 3<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-3\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tutorial ini mulai dimana <a class=\"reference internal\" href=\"/id/3.0/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a> tinggalkan. Kami sedang melanjutkan aplikasi jejak pendapat jaringan dan akan fokus membuat antarmuka umum -- &quot;tampilan&quot;.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Dimana mendapatkan bantuan:</p>\n<p>Jika anda memiliki masalah melalui tutorial ini, harap geser ke <a class=\"reference internal\" href=\"/id/3.0/faq/help/\"><span class=\"doc\">Getting Help</span></a> bagian dari FAQ.</p>\n</aside>\n<section id=\"overview\">\n<h2>Ikhtisar<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sebuah tampilan adalah &quot;jenis&quot; dari halaman Jaringan di aplikasi Django yang umumnya melayani fungsi khusus dan mempunyai cetakan khusus. Sebagai contoh, di aplikasi blog, anda mungkin mempunyai tampilan berikut:</p>\n<ul class=\"simple\">\n<li><p>Halaman rumah Blog -- menampilkan sedikit masukan terakhir.</p></li>\n<li><p>Halaman &quot;rincian&quot; masukan -- halaman permalink untuk masukan tunggal.</p></li>\n<li><p>Halaman arsip berdasarkan-tahun -- menampilkan semua bulan dengan masukan di tahun yang diberikan.</p></li>\n<li><p>Halaman arsip berdasarkan-bulan -- menampilkan semua hari dengan masukan di bulan yang diberikan.</p></li>\n<li><p>Halaman arsip berdasarkan-hari -- menampilkan semua masukan di hari yang diberikan.</p></li>\n<li><p>Tindakan komentar -- menangani penempatan komentar pada masukan yang diberikan.</p></li>\n</ul>\n<p>Di aplikasi jejak pendapat kami, kami akan mempunyai empat tampilan berikut:</p>\n<ul class=\"simple\">\n<li><p>Halaman &quot;index&quot; pertanyaan -- menampilkan sedikit pertanyaan terakhir.</p></li>\n<li><p>Halaman &quot;index&quot; pertanyaan -- menampilkan teks pertanyaan, dengan tidak ada hasil tetapi dengan formulir untuk memilih.</p></li>\n<li><p>Halaman &quot;hasil&quot; pertanyaan -- menampilkan hasil untuk pertanyaan tertentu.</p></li>\n<li><p>Tindakan pilih -- menangani pemilihan untuk pilihan tertentu di pertanyaan tertentu.</p></li>\n</ul>\n<p>Di Django, halaman jaringan dan isi lain dikirimkan oleh tampilan. Setiap tampilan diwakulkan oleh fungsi Python (atau metode, dalam kasus tampilan berdasarkan-kelas). Django akan memilih sebuah tampilan dengan mencoba URL yang diminta (tepatnya, bagian dari URL setelah nama ranah).</p>\n<p>Now in your time on the web you may have come across such beauties as\n<code class=\"docutils literal notranslate\">ME2/Sites/dirmod.htm?sid=&amp;type=gen&amp;mod=Core+Pages&amp;gid=A6CD4967199A42D9B65B1B</code>.\nYou will be pleased to know that Django allows us much more elegant\n<em>URL patterns</em> than that.</p>\n<p>Sebuah pola URL adalah bentuk umum dari URL - sebagai contoh: <code class=\"docutils literal notranslate\">/newsarchive/&lt;year&gt;/&lt;month&gt;/</code>.</p>\n<p>Untuk mendapatkan URL dari tampilan (view), Django menggunakan yang disebut 'URLconfs'. Sebuah URLconf memetakan pola URL ke views.</p>\n<p>Tutorial ini menyediakan perintah dasar dalam menggunakan URLconf, dan anda dapat mengacu pada <a class=\"reference internal\" href=\"/id/3.0/topics/http/urls/\"><span class=\"doc\">Pengirim URL</span></a> untuk informasi lebih.</p>\n</section>\n<section id=\"writing-more-views\">\n<h2>Menulis tampilan lebih<a class=\"heading-anchor\" href=\"#writing-more-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang mari kita menambahkan tampilan lebih pada <code class=\"docutils literal notranslate\">polls/views.py</code>. Tampilan ini sedikit berbeda karena mereka mangambil argumen:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">def</span> <span class=\"nf\">detail</span><span class=\"p\">(</span>request<span class=\"p\">,</span> question_id<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;re looking at question </span><span class=\"si\">%s</span><span class=\"s2\">.&quot;</span> <span class=\"o\">%</span> question_id<span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">results</span><span class=\"p\">(</span>request<span class=\"p\">,</span> question_id<span class=\"p\">):</span>\n    response <span class=\"o\">=</span> <span class=\"s2\">&quot;You&#39;re looking at the results of question </span><span class=\"si\">%s</span><span class=\"s2\">.&quot;</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span>response <span class=\"o\">%</span> question_id<span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">vote</span><span class=\"p\">(</span>request<span class=\"p\">,</span> question_id<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;re voting on question </span><span class=\"si\">%s</span><span class=\"s2\">.&quot;</span> <span class=\"o\">%</span> question_id<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Ikat tampilan-tampilan baru ini kedalam modul <code class=\"docutils literal notranslate\">polls.urls</code> dengan menambahkan panggilan <a class=\"reference internal\" href=\"/id/3.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> berikut:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/urls.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ex: /polls/</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ex: /polls/5/</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>detail<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ex: /polls/5/results/</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/results/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>results<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;results&#39;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ex: /polls/5/vote/</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/vote/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>vote<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Lihatlah di perambah anda, pada &quot;/polls/34/&quot;. Itu akan menjalankan cara <code class=\"docutils literal notranslate\">detail()</code> dan menampilkan ID apapun anda sediakan di URL. Coba &quot;/polls/34/results/&quot; dan &quot;/polls/34/vote/&quot; juga -- ini akan menampilkan hasil placeholder dan halaman pemilihan.</p>\n<p>Ketika seseorang meminta sebuah halaman dari situs jaringan anda -- katakan, &quot;/polls/34/&quot;, Django akan memuat modul Python <code class=\"docutils literal notranslate\">mysite.urls</code> karena itu ditunjuk dengan pengaturan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\">ROOT_URLCONF</code></a>. Itu menemukan variabel bernama <code class=\"docutils literal notranslate\">urlpatterns</code> dan melintasi pola dalam urutan. Setelah menemukan kecocokan pada <code class=\"docutils literal notranslate\">'polls/'</code>, itu memotong teks pencocokan (<code class=\"docutils literal notranslate\">'polls/'</code>) dan mengirim teks sisa -- <code class=\"docutils literal notranslate\">&quot;34/&quot;</code> -- ke URLconf 'polls.urls' untuk pengolahan lebih lanjut. Disana itu cocok <code class=\"docutils literal notranslate\">'&lt;int:question_id&gt;/'</code>, menghasilkan dalam sebuah panggilan ke tampilan <code class=\"docutils literal notranslate\">detail()</code> seperti itu:</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>detail<span class=\"p\">(</span>request<span class=\"o\">=&lt;</span>HttpRequest <span class=\"nb\">object</span><span class=\"o\">&gt;</span><span class=\"p\">,</span> question_id<span class=\"o\">=</span><span class=\"mi\">34</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Bagian <code class=\"docutils literal notranslate\">question_id=34</code> datang dari <code class=\"docutils literal notranslate\">&lt;int:question_id&gt;</code>. Menggunakan kurung sudut &quot;menangkap&quot; bagian dari URL dan mengirim itu sebagai sebuah argumen katakunci ke fungsi tampilan. Bagian <code class=\"docutils literal notranslate\">:question_id&gt;</code> dari string menentukan nama yang akan digunakan menciri pola tercocok, dan bagian <code class=\"docutils literal notranslate\">&lt;int:</code> adalah sebuah pengubah yang menentukan pola harus cocok bagian ini dari jalur URL.</p>\n<p>Tidak perlu menambah URL seperti <code class=\"docutils literal notranslate\">.html</code> -- meskipun anda menginginkannya, dalam hal ini anda dapat melakukan sesuatu 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>path<span class=\"p\">(</span><span class=\"s1\">&#39;polls/latest.html&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">),</span>\n</code></pre></div>\n<p>Tetapi, jangan melakukan itu. Itu lucu.</p>\n</section>\n<section id=\"write-views-that-actually-do-something\">\n<h2>Tulis tampilan yang sebenarnya melakukan sesuatu<a class=\"heading-anchor\" href=\"#write-views-that-actually-do-something\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Setiap tampilan bertanggung jawab untuk melakukan satu dari dua hal: mengembalikan sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> mengandung isi untuk halaman diminta, atau menimbulkan sebuah pengecualian seperti <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a>. Sisanya terserah anda.</p>\n<p>Tampilan anda dapat membaca rekaman dari basisdata, atau tidak. Dia dapat menggunakan cetakan sistem seperti DJango -- atau sistem cetakan Phyton pihak-ketiga -- atau tidak. Dia dapat membangkitkan berkas PDF, mengeluarkan XML, membuat berkas ZIP dengan cepat, apapun anda inginkan, menggunakan pustaka Phyton apapun anda inginkan.</p>\n<p>Semua Django inginkan adalah <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a>. Atau sebuah pengecualian.</p>\n<p>Karena sangat nyaman, mari kita menggunakan API basisdata Django sendiri, yang akan melingkupi di <a class=\"reference internal\" href=\"/id/3.0/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a>. Ini satu tikaman pada tampilan <code class=\"docutils literal notranslate\">index()</code> baru, yang menampilka pertanyaan jejak pendapat 5 terakhir di sistem, dipisahkan oleh koma, menurut tanggal penerbitan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    latest_question_list <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s1\">&#39;-pub_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n    output <span class=\"o\">=</span> <span class=\"s1\">&#39;, &#39;</span><span class=\"o\">.</span>join<span class=\"p\">([</span>q<span class=\"o\">.</span>question_text <span class=\"k\">for</span> q <span class=\"ow\">in</span> latest_question_list<span class=\"p\">])</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span>output<span class=\"p\">)</span>\n\n<span class=\"c1\"># Leave the rest of the views (detail, results, vote) unchanged</span>\n</code></pre></figure>\n<p>Tidak ada masalah disini, meskipun: rancangan halaman adalah kode-keras di tampilan. Jika anda ingin merubah cara tampilan halaman, anda harus menyunting kode Phyton ini. Jadi mari kita menggunakan sistem cetakan Django untuk memisahkan rancangan dari Phyton dengan membuat cetakan yang tampilan dapat digunakan.</p>\n<p>Pertama, buat direktori disebut <code class=\"docutils literal notranslate\">templates</code> di direktori``polls``. Django akan mencari cetakan disana.</p>\n<p>Pengaturan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> proyek anda menggambarkan bagaimana Django akan memuat dan membuat halaman. Pengaturan awal berkas mengkonfigurasikan backend <code class=\"docutils literal notranslate\">DjangoTemplates</code> yang pilihan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a> adalah disetel ke <code class=\"docutils literal notranslate\">True</code>. Berdasarkan kaidah <code class=\"docutils literal notranslate\">DjangoTemplates</code> mencari untuk subdirektori :cetakan&quot; dalam setiap <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p>\n<p>Dalam direktori <code class=\"docutils literal notranslate\">templates</code> anda telah buat, buat direktori lain disebut <code class=\"docutils literal notranslate\">polls</code>, dan didalamnya buat sebuah berkas dipanggil <code class=\"docutils literal notranslate\">index.html</code>. Dengan kata lain, cetakan anda harus di <code class=\"docutils literal notranslate\">polls/templates/polls/index.html</code>. Karena bagaimana pemuat cetakan <code class=\"docutils literal notranslate\">app_directories</code> bekerja seperti digambarkan diatas, anda dapat mengacu pada cetakan ini dalam Django sebagai <code class=\"docutils literal notranslate\">polls/index.html</code>.</p>\n<aside class=\"admonition-template-namespacing admonition\" role=\"note\">\n<p class=\"admonition-title\">Namespacing cetakan</p>\n<p>Sekarang kami <em>mungkin</em> dapat lolos dengan menaruh cetakan kami secara langsung dalam <code class=\"docutils literal notranslate\">polls/templates</code> (daripada membuat subdirektori <code class=\"docutils literal notranslate\">polls</code> lain). tetapi itu sebenarnya ide buruk. Django akan memilih cetakan pertama dia temukan yang namanya cocok, dan jika anda memiliki cetakan dengan nama sana dalam aplikasi <em>berbeda</em>, Django tidak dapat membedakan mereka. Kami butuh dapat menunjuk Django pada satuyang benar, dan cara terbaik adalah memastikan ini dengan <em>namespace</em> merena. Yaitu, dengan menaruh cetakan tersebut didalam direktori <em>lain</em> bernama aplikasi itu sendiri.</p>\n</aside>\n<p>Taruh kode berikut di cetakan itu:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">polls/templates/polls/index.html</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">latest_question_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">question</span> <span class=\"k\">in</span> <span class=\"nv\">latest_question_list</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/polls/</span><span class=\"cp\">{{</span> <span class=\"nv\">question.id</span> <span class=\"cp\">}}</span><span class=\"s\">/&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>No polls are available.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Untuk membuat tutorial lebih pendek, semua contoh cetakan menggunakan HTML tidak lengkap. Dalam proyek anda sendiri anda harus menggunakan <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started#Anatomy_of_an_HTML_document\">complete HTML documents</a>.</p>\n</aside>\n<p>Sekarang mari kita perbaharui tampilan <code class=\"docutils literal notranslate\">index</code> di <code class=\"docutils literal notranslate\">polls/views.py</code> untuk menggunakan cetakan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> loader\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    latest_question_list <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s1\">&#39;-pub_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n    template <span class=\"o\">=</span> loader<span class=\"o\">.</span>get_template<span class=\"p\">(</span><span class=\"s1\">&#39;polls/index.html&#39;</span><span class=\"p\">)</span>\n    context <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;latest_question_list&#39;</span><span class=\"p\">:</span> latest_question_list<span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">,</span> request<span class=\"p\">))</span>\n</code></pre></figure>\n<p>Kode memuat cetakan disebut <code class=\"docutils literal notranslate\">polls/index.html</code> dan melewatkannya ke konteks. Konteks adalah kamus variabel cetakan pemetaan dinamai untuk obyek Phyton.</p>\n<p>Muat halaman dengan menunjuk perambah anda pada &quot;/polls/&quot;, dan anda akan melihat daftar-bullet mengandung pertanyaan &quot;Ada apa&quot; dari <a class=\"reference internal\" href=\"/id/3.0/intro/tutorial02/\"><span class=\"doc\">Tutorial 2</span></a>. Tautan menunjuk ke halaman rincian pertanyaan.</p>\n<section id=\"a-shortcut-render\">\n<h3>Jalan pintas: <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\">render()</code></a><a class=\"heading-anchor\" href=\"#a-shortcut-render\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Itu adalah dialek umum untuk memuat cetakan, isi konteks dan mengembalikan sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> dengan hasil dari cetakan dibuat. Django menyediakan jalan pintas. Disini tampilan <code class=\"docutils literal notranslate\">index()</code> penuh, ditulis kembali:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    latest_question_list <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s1\">&#39;-pub_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n    context <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;latest_question_list&#39;</span><span class=\"p\">:</span> latest_question_list<span class=\"p\">}</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;polls/index.html&#39;</span><span class=\"p\">,</span> context<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Catat bahwa sekali kami telah selesaikan ini di semua tampilan ini, kami tidak lagi butuh mengimpor <a class=\"reference internal\" href=\"/id/3.0/topics/templates/#module-django.template.loader\" title=\"django.template.loader\"><code class=\"xref py py-mod docutils literal notranslate\">loader</code></a> dan <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> (anda akan ingin menjaga <code class=\"docutils literal notranslate\">HttpResponse</code> jika anda masih mempunyai potongan cara untuk <code class=\"docutils literal notranslate\">detail</code>, <code class=\"docutils literal notranslate\">results</code>, dan <code class=\"docutils literal notranslate\">vote</code>).</p>\n<p>Fungsi <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\">render()</code></a> mengambil permintaan obyek sebagai argumen pertamanya, nama cetakan sebagai argumen keduanya dan kamus sebagai pilihan argumen ketiganya. Dia mengembalikan sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> dari cetakan diberikan dibangun dengan konteks yang diberikan.</p>\n</section>\n</section>\n<section id=\"raising-a-404-error\">\n<h2>Menaikkan kesalahan 404<a class=\"heading-anchor\" href=\"#raising-a-404-error\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sekarang, mari kita mengerjakan tampilan rincian pertanyaan -- halaman yang menampilkan teks pertanyaan untuk jejak pertanyaan yang diberikan. Inilah tampilan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"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.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n<span class=\"c1\"># ...</span>\n<span class=\"k\">def</span> <span class=\"nf\">detail</span><span class=\"p\">(</span>request<span class=\"p\">,</span> question_id<span class=\"p\">):</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        question <span class=\"o\">=</span> Question<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span>question_id<span class=\"p\">)</span>\n    <span class=\"k\">except</span> Question<span class=\"o\">.</span>DoesNotExist<span class=\"p\">:</span>\n        <span class=\"k\">raise</span> Http404<span class=\"p\">(</span><span class=\"s2\">&quot;Question does not exist&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;polls/detail.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;question&#39;</span><span class=\"p\">:</span> question<span class=\"p\">})</span>\n</code></pre></figure>\n<p>Konsep baru disini: Tapilan memunculkan pengecualian <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> jika sebuah pertanyaan dengan ID diminta tidak ada.</p>\n<p>Kami akan berunding apa anda dapat taruh di cetakan <code class=\"docutils literal notranslate\">polls/detail.html</code> itu kemudian, tetapi jika anda suka mendapatkan cepat contoh diatas bekerja, sebuah berkas mengandung hanya:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">polls/templates/polls/detail.html</figcaption>\n<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\">question</span> <span class=\"cp\">}}</span>\n</code></pre></figure>\n<p>akan membantu anda mulai untuk sekarang.</p>\n<section id=\"a-shortcut-get-object-or-404\">\n<h3>Jalan pintas: <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.get_object_or_404\" title=\"django.shortcuts.get_object_or_404\"><code class=\"xref py py-func docutils literal notranslate\">get_object_or_404()</code></a><a class=\"heading-anchor\" href=\"#a-shortcut-get-object-or-404\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Adalah dialek umum untuk menggunakan <a class=\"reference internal\" href=\"/id/3.0/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> dan menimbulkan <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> jika obyek tidak ada. Django menyediakan jalan pintas. Ini tampilan detail()`, ditulis kembali:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> get_object_or_404<span class=\"p\">,</span> render\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Question\n<span class=\"c1\"># ...</span>\n<span class=\"k\">def</span> <span class=\"nf\">detail</span><span class=\"p\">(</span>request<span class=\"p\">,</span> question_id<span class=\"p\">):</span>\n    question <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>Question<span class=\"p\">,</span> pk<span class=\"o\">=</span>question_id<span class=\"p\">)</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;polls/detail.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;question&#39;</span><span class=\"p\">:</span> question<span class=\"p\">})</span>\n</code></pre></figure>\n<p>Fungsi <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.get_object_or_404\" title=\"django.shortcuts.get_object_or_404\"><code class=\"xref py py-func docutils literal notranslate\">get_object_or_404()</code></a> mengambil model Django sebagai argumen pertamanya dan angka sewenang-wenang dari kata kunci argumen, yang dia melalui fungsi <a class=\"reference internal\" href=\"/id/3.0/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> dari pengelola model. Dia menimbulkan <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> jika obyek tidak ada.</p>\n<aside class=\"admonition-philosophy admonition\" role=\"note\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Kenapa kami menggunakan fungsi pembantu <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.get_object_or_404\" title=\"django.shortcuts.get_object_or_404\"><code class=\"xref py py-func docutils literal notranslate\">get_object_or_404()</code></a> daripada otomatis menangkap pengecualian <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">ObjectDoesNotExist</code></a> pada tingkatan lebih tinggi, atau mempunyai API model menimbulkan <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> daripada <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">ObjectDoesNotExist</code></a>?</p>\n<p>Karena itu akan memasangkan lapisan model ke lapisan tampilan. Satu dari terutama sasaran rancangan dari Django adalah merawat sambungan longgar. Beberapa sambungan terkendali diperkenalkan di modul <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#module-django.shortcuts\" title=\"django.shortcuts: Convenience shortcuts that span multiple levels of Django's MVC stack.\"><code class=\"xref py py-mod docutils literal notranslate\">django.shortcuts</code></a>.</p>\n</aside>\n<p>Terdapat juga sebuah fungsi <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.get_list_or_404\" title=\"django.shortcuts.get_list_or_404\"><code class=\"xref py py-func docutils literal notranslate\">get_list_or_404()</code></a>, yang bekerja hanya sebagai <a class=\"reference internal\" href=\"/id/3.0/topics/http/shortcuts/#django.shortcuts.get_object_or_404\" title=\"django.shortcuts.get_object_or_404\"><code class=\"xref py py-func docutils literal notranslate\">get_object_or_404()</code></a> -- kecuali menggunakan <a class=\"reference internal\" href=\"/id/3.0/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> daripada <a class=\"reference internal\" href=\"/id/3.0/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>. Itu memunculkan <a class=\"reference internal\" href=\"/id/3.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-exc docutils literal notranslate\">Http404</code></a> jika daftar kosong.</p>\n</section>\n</section>\n<section id=\"use-the-template-system\">\n<h2>Gunakan sistem cetakan<a class=\"heading-anchor\" href=\"#use-the-template-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Kembali ke tampilan <code class=\"docutils literal notranslate\">detail()</code> untuk aplikasi jejak pendapat kami. Diberikan variabel konteks <code class=\"docutils literal notranslate\">question</code>, disini adalah apa cetakan <code class=\"docutils literal notranslate\">polls/detail.html</code> mungkin kelihatan seperti:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">polls/templates/polls/detail.html</figcaption>\n<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=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">choice</span> <span class=\"k\">in</span> <span class=\"nv\">question.choice_set.all</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">choice.choice_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Sistem cetakan menggunakan sintaks dot-lookup untuk mengakses atribut variabel. Di contoh dari <code class=\"docutils literal notranslate\">{{ question.question_text }}</code>, pertama Django melakukan lookup perkamusan pada obyek <code class=\"docutils literal notranslate\">question</code>. Kegagalan itu, dia mencoba sebuah atribut lookup -- yang bekerja, di kasus ini. Jika atribut lookup telah gagal, dia akan mencoba list-index lookup.</p>\n<p>Pemanggilan-cara terjadi di <a class=\"reference internal\" href=\"/id/3.0/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\">{% for %}</code></a> loop: <code class=\"docutils literal notranslate\">question.choice_set.all</code> adalah ditafsirkan sebagai kode Phyton <code class=\"docutils literal notranslate\">question.choice_set.all()</code>, yang mengembalikan berulang obyek <code class=\"docutils literal notranslate\">Choice</code> dan cocok untuk digunakan di etiket <a class=\"reference internal\" href=\"/id/3.0/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\">{% for %}</code></a>.</p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/3.0/topics/templates/\"><span class=\"doc\">panduan cetakan</span></a> untuk lebih tentang cetakan.</p>\n</section>\n<section id=\"removing-hardcoded-urls-in-templates\">\n<h2>Memindahkan URL kode keras di cetakan<a class=\"heading-anchor\" href=\"#removing-hardcoded-urls-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ingat, ketika kami menulis tautan ke pertanyaan di cetakan <code class=\"docutils literal notranslate\">polls/index.html</code>, tautan sebagian dikodekan keras seperti 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=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/polls/</span><span class=\"cp\">{{</span> <span class=\"nv\">question.id</span> <span class=\"cp\">}}</span><span class=\"s\">/&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Masalah dengan kodekeras ini, pendekatan erat adalah bahwa itu menjadi menantang untuk merubah URL pada proyek dengan banyak cetakan. Bagaimanapun, sejak anda menentukan argumen nama dalam fungsi-fungsi <a class=\"reference internal\" href=\"/id/3.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> dalam modul <code class=\"docutils literal notranslate\">polls.urls</code>, anda dapat memindahkan kepercayaan pada jalur URL khusus ditentukan dalam konfigurasi url anda dengan menggunakan etiket cetakan <code class=\"docutils literal notranslate\">{% url %}</code>.</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=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;detail&#39;</span> <span class=\"nv\">question.id</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Cara ini bekerja adalah dengan mencari pengertian URL seperti yang ditentukan di modul <code class=\"docutils literal notranslate\">polls.urls</code>. Anda dapat melihat sebenarnya dimana nama URL dari 'rincian' ditentukan dibawah:</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=\"o\">...</span>\n<span class=\"c1\"># the &#39;name&#39; value as called by the {% url %} template tag</span>\npath<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>detail<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n<p>Jika anda ingin merubah URL dari tampilan rinci jejak pendapat ke sesuatu lain, mungkin ke sesuatu seperti <code class=\"docutils literal notranslate\">polls/specifics/12/</code> dibandingkan melakukannya di cetakan (atau cetakan-cetakan) anda akan merubahnya di <code class=\"docutils literal notranslate\">polls/urls.py</code>:</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=\"o\">...</span>\n<span class=\"c1\"># added the word &#39;specifics&#39;</span>\npath<span class=\"p\">(</span><span class=\"s1\">&#39;specifics/&lt;int:question_id&gt;/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>detail<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n</section>\n<section id=\"namespacing-url-names\">\n<h2>Nama URL namespacing<a class=\"heading-anchor\" href=\"#namespacing-url-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Proyek tutorial hanya punya satu aplikasi, <code class=\"docutils literal notranslate\">polls</code>. Di proyek Django nyata, mungkin ada lima, sepuluh, dua puluh aplikasi atau lebih. Bagaimana Django membedakan nama URL diantara mereka? Sebagai contoh, aplikasi <code class=\"docutils literal notranslate\">polls</code> mempunyai tampilan <code class=\"docutils literal notranslate\">detail</code>, dan mungkin sebuah aplikasi di proyek sama yaitu untuk sebuah blog. Bagaimana satu membuatnya sehingga Django mengetahui tampilan aplikasi mana untuk membuat untuk sebuah url ketika menggunakan etiket cetakan <code class=\"docutils literal notranslate\">{% url %}</code>?</p>\n<p>Jawabannya adalah menambahkan namespace ke URLconf anda. Di berkas <code class=\"docutils literal notranslate\">polls/urls.py</code>, lanjutkan dan tambah <code class=\"docutils literal notranslate\">app_name</code> untuk mengatur namespace aplikasi:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">polls/urls.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\napp_name <span class=\"o\">=</span> <span class=\"s1\">&#39;polls&#39;</span>\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>detail<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/results/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>results<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;results&#39;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&lt;int:question_id&gt;/vote/&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>vote<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Sekarang rubah cetakan  <code class=\"docutils literal notranslate\">polls/index.html</code> anda dari:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">polls/templates/polls/index.html</figcaption>\n<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=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;detail&#39;</span> <span class=\"nv\">question.id</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>untuk menunjuk tampilan rincian namespace:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\">polls/templates/polls/index.html</figcaption>\n<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=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;polls:detail&#39;</span> <span class=\"nv\">question.id</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">question.question_text</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Ketika anda nyaman dengan menulis tampilan, baca <a class=\"reference internal\" href=\"/id/3.0/intro/tutorial04/\"><span class=\"doc\">part 4 of this tutorial</span></a> untuk mempelajari dasar tentang pengolahan formulir dan tampilan umum.</p>\n</section>","rootId":"writing-your-first-django-app-part-3","toc":[{"title":"Ikhtisar","anchor":"overview","children":[]},{"title":"Menulis tampilan lebih","anchor":"writing-more-views","children":[]},{"title":"Tulis tampilan yang sebenarnya melakukan sesuatu","anchor":"write-views-that-actually-do-something","children":[{"title":"Jalan pintas: render()","anchor":"a-shortcut-render","children":[]}]},{"title":"Menaikkan kesalahan 404","anchor":"raising-a-404-error","children":[{"title":"Jalan pintas: get_object_or_404()","anchor":"a-shortcut-get-object-or-404","children":[]}]},{"title":"Gunakan sistem cetakan","anchor":"use-the-template-system","children":[]},{"title":"Memindahkan URL kode keras di cetakan","anchor":"removing-hardcoded-urls-in-templates","children":[]},{"title":"Nama URL namespacing","anchor":"namespacing-url-names","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Mulai","url":"/id/3.0/intro/"}],"prev":{"docname":"intro/tutorial02","title":"Menulis aplikasi Django kedua anda, bagian 2","url":"/id/3.0/intro/tutorial02/"},"next":{"docname":"intro/tutorial04","title":"Menulis aplikasi Django pertama anda, bagian 4","url":"/id/3.0/intro/tutorial04/"},"formats":{"html":"/id/3.0/intro/tutorial03/","markdown":"/id/3.0/intro/tutorial03.md","json":"/id/3.0/intro/tutorial03.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/intro/tutorial03.txt","official":"https://docs.djangoproject.com/id/3.0/intro/tutorial03/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}