{"title":"Kerangka kerja umpan perkongsian","version":"5.2","locale":"id","docname":"ref/contrib/syndication","url":"/id/5.2/ref/contrib/syndication/","canonical":"https://djangodocs.dev/id/5.2/ref/contrib/syndication/","summary":"Django comes with a high-level syndication-feed-generating framework for creating RSS and Atom feeds. Untuk membuat umpan sindikasi apapun, semua anda harus lakukan…","html":"<span id=\"the-syndication-feed-framework\"></span><h1>Kerangka kerja umpan perkongsian<a class=\"heading-anchor\" href=\"#module-django.contrib.syndication\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django comes with a high-level syndication-feed-generating framework for\ncreating <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Glossary/RSS\">RSS</a> and <span class=\"target\" id=\"index-0\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4287.html\"><strong>Atom</strong></a> feeds.</p>\n<p>Untuk membuat umpan sindikasi apapun, semua anda harus lakukan adalah menulis kelas Python pendek. Anda dapat membuat sebanyak umpan anda inginkan.</p>\n<p>Django also comes with a lower-level feed-generating API. Use this if\nyou want to generate feeds outside of a web context, or in some other\nlower-level way.</p>\n<section id=\"the-high-level-framework\">\n<h2>Kerangka kerja tingkat-tinggi<a class=\"heading-anchor\" href=\"#the-high-level-framework\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"overview\">\n<h3>Ikhtisar<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kerangka kerja membangkitkan-umpan tingkat-tinggi didukung oleh kelas <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code> dan tunjuk kesebuah contoh dari itu dalam <a class=\"reference internal\" href=\"/id/5.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> anda.</p>\n</section>\n<section id=\"feed-classes\">\n<h3>Kelas-kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code><a class=\"heading-anchor\" href=\"#feed-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sebuah kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a> adalah sebuah kelas Python yang mewakili umpan persengkongkolan. Sebuah umpan dapat berupa sederhana (misalnya, sebuah umpan &quot;situs berita&quot;, atau umpan dasar menampilkan masukan terakhir dari blog) atau lebih rumit (misalnya, sebuah umpan menampilkan semua masukan blog dalam sebuah kategori tertentu, dimana kategori adalah variabel).</p>\n<p>Subkelas kelas-kelas umpan <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.syndication.views.Feed</span></code></a>. Mereka dapat berada dimana saka dalam dasar kode anda.</p>\n<p>Instance dari kelas-kelas  <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a> adalah tampilan dimana dapat digunakan dalam <a class=\"reference internal\" href=\"/id/5.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> anda.</p>\n</section>\n<section id=\"a-simple-example\">\n<h3>Sebuah contoh sederhana<a class=\"heading-anchor\" href=\"#a-simple-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Contoh sederhana ini, diambil daro hipotesa polisi melebihi situs berita menggambarkan sebuah umpan dari lima barang berita terakhir.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">policebeat.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NewsItem</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LatestEntriesFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Police beat site news&quot;</span>\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/sitenews/&quot;</span>\n    <span class=\"n\">description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Updates on changes and additions to police beat central.&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">NewsItem</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-pub_date&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">item</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">item</span><span class=\"o\">.</span><span class=\"n\">description</span>\n\n    <span class=\"c1\"># item_link is only needed if NewsItem has no get_absolute_url method.</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;news-item&quot;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">item</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Untuk menghubungi URL ke umpan ini, taruh sebuah instance dari obyek Feed dalam  <a class=\"reference internal\" href=\"/id/5.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> anda. 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.feeds</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LatestEntriesFeed</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;latest/feed/&quot;</span><span class=\"p\">,</span> <span class=\"n\">LatestEntriesFeed</span><span class=\"p\">()),</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Catatan:</p>\n<ul class=\"simple\">\n<li><p>Subkelas kelas Feed <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.syndication.views.Feed</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> berhubungan pada RSS standar unsur <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;title&gt;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>, masing-masing.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> is, a method that returns a list of objects that should be\nincluded in the feed as <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;item&gt;</span></code> elements. Although this example returns\n<code class=\"docutils literal notranslate\"><span class=\"pre\">NewsItem</span></code> objects using Django's <a class=\"reference internal\" href=\"/id/5.2/ref/models/querysets/\"><span class=\"doc\">object-relational mapper</span></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> doesn't have to return model instances.\nAlthough you get a few bits of functionality &quot;for free&quot; by using Django\nmodels, <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> can return any type of object you want.</p></li>\n<li><p>Jika anda sedang membuat sebuah umpan Atom, daripada sebuah umoan RSS, setel atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code> daripada atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code>. Lihat <a class=\"reference internal\" href=\"#publishing-atom-and-rss-feeds-in-tandem\">Publishing Atom and RSS feeds in tandem</a>, nanti, untuk sebuah contoh.</p></li>\n</ul>\n<p>Satu hal tersisa untuk dilakukan. Dalam sebuah umpan RSS, setiap <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;item&gt;</span></code> mempunyai sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;title&gt;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>. Kami butuh memberitahu kerangka kerja data apa untuk ditaruh kedalam unsur-unsur tersebut.</p>\n<ul>\n<li><p>Untuk isi dari <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;title&gt;</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>, Django mencoba memanggil metode <code class=\"docutils literal notranslate\"><span class=\"pre\">item_title()</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">item_description()</span></code> pada kelas <code class=\"xref py py-class docutils literal notranslate\"> <span class=\"pre\">Mereka</span> <span class=\"pre\">meloloskan</span> <span class=\"pre\">sebuah</span> <span class=\"pre\">parameter</span> <span class=\"pre\">tunggal,</span> <span class=\"pre\">``item`</span></code>, yaitu obyek itu sendiri. Ini adalah pilihan; secara awalan, perwakilan string dari obyek digunakan untuk keduanya.</p>\n<p>Jika anda ingin melalukan pembentukan khusus apapun untuk salah satu judul atau keterangan, <a class=\"reference internal\" href=\"/id/5.2/ref/templates/language/\"><span class=\"doc\">Django templates</span></a> dapat digunakan sebagai gantinya. Jalur-jalur mereka dapat ditentukan dengan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">title_template</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">description_template</span></code> pada kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a>. Cetakan-cetakan dibangun untuk setiap barang dan dilewatkan dua cetakan variabel konteks:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">obj</span> <span class=\"pre\">}}</span></code> -- Obyek saat ini (satu dari obyek-obyek manapun anda kembalikan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">site</span> <span class=\"pre\">}}</span></code> -- Sebuah obyek <a class=\"reference internal\" href=\"/id/5.2/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.sites.models.Site</span></code></a> mewakili situs saat ini. Ini berguna untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">site.domain</span> <span class=\"pre\">}}</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">site.name</span> <span class=\"pre\">}}</span></code>. Jika anda <em>tidak</em> memiliki kerangka kerja situs Django terpasang, ini akan disetel menjadi sebuah obyek <a class=\"reference internal\" href=\"/id/5.2/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestSite</span></code></a>. Lihat <a class=\"reference internal\" href=\"/id/5.2/ref/contrib/sites/#id3\"><span class=\"std std-ref\">RequestSite section of the sites framework documentation</span></a> untuk lebih.</p></li>\n</ul>\n<p>Lihat <a class=\"reference internal\" href=\"#a-complex-example\">a complex example</a> dibawah yang menggunakan cetakan gambaran.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.syndication.Feed.get_context_data\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Feed.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_context_data</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.syndication.Feed.get_context_data\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ada juga cara melewatkan informasi tambahan ke cetakan judul dan keterangan, jika anda butuh memasok lebih dari dua variabel disebutkan sebelumnya. Anda dapat menyediakan penerapan anda dari metode <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data</span></code> dalam subkelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code> anda. 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">mysite.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticlesFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;My articles&quot;</span>\n    <span class=\"n\">description_template</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;feeds/articles.html&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-pub_date&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;bar&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n</code></pre></div>\n</dd></dl>\n\n<p>Dan cetakannya:</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>Something about <span class=\"cp\">{{</span> <span class=\"nv\">foo</span> <span class=\"cp\">}}</span>: <span class=\"cp\">{{</span> <span class=\"nv\">obj.description</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Metode ini akan dipanggil satu per setiap barang dalam list dikembalikan oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> dengan argumen katakunci berikut:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>: barang saat ini. Untuk alasan kesesuaian kebelakang, nama dari variabel konteks ini adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">obj</span> <span class=\"pre\">}}</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code>: obyek dikembalikan oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code>. Secara awalan ini tidak dibuka ke cetakan untuk menghindari kebingungan dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">obj</span> <span class=\"pre\">}}</span></code> (lihat diatas), tetapi anda dapat menggunakan itu dalam penerapan anda dari <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data()</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code>: situs saat ini seperti digambarkan diatas.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>: permintaan saat ini.</p></li>\n</ul>\n<p>Perilaku dari meniru <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data()</span></code> yang dari <a class=\"reference internal\" href=\"/id/5.2/topics/class-based-views/generic-display/#adding-extra-context\"><span class=\"std std-ref\">generic views</span></a> - anda seharusnya memanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> untuk mendapatkan konteks data dari kelas induk, tambah data anda dan kembalikan ke dictionari dirubah.</p>\n</li>\n<li><p>ntuk menentukan isi dari <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code>, anda memiliki dua pilihan. Untuk setiap barang dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>, Django pertama mencoba memanggil metode <code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> pada kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a>. Dalam cara sama pada judul dan keterangan, itu melewatkan itu sebuah parameter tunggal, <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>. Jika metode itu tidak ada, Django mencoba menjalankan metode <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> pada obyek itu. Kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> harus mengembalikan URL barang sebagai sebuah string Python biasa. Ketika dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code>, hasil dari <code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> akan disertakan langsung dalam URL, jadi anda bertanggungjawab untuk melakukan semua URL yang diperlukan mengutip dan merubah ke ASCII didalam metode itu sendiri.</p></li>\n</ul>\n</section>\n<section id=\"a-complex-example\">\n<h3>Sebuah contoh rumit<a class=\"heading-anchor\" href=\"#a-complex-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kerangka kerja juga mendukung umpan kebih rumit, melalui argumen.</p>\n<p>Sebagai contoh, sebuah situs jaringan dapat menawarkan sebuah umpan RSS pada kesalahan baru untuk setiap polisi dikalahkan dalam kota. Itu konyol untuk membuat kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a> terpisah untuk polisi kalah; itu akan melanggar <a class=\"reference internal\" href=\"/id/5.2/misc/design-philosophies/#dry\"><span class=\"std std-ref\">DRY principle</span></a> dan akan memasangkan data ke logika pemrograman. Sebagai gantinya, persengkongkolan kerangka kerja membiarkan anda mengakses argumen-argumen dilewatkan dari <a class=\"reference internal\" href=\"/id/5.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> anda sehingga umpan dapat mengeluarkan barang berdasarkan pada informasi dalam URL umpan.</p>\n<p>Polisi mengalahkan umpan dapat diakses melalui URL seperti ini:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/beats/613/rss/</span></code> -- Returns recent crimes for beat 613.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/beats/1424/rss/</span></code> -- Returns recent crimes for beat 1424.</p></li>\n</ul>\n<p>Ini dapat cocok dengan baris <a class=\"reference internal\" href=\"/id/5.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> 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\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;beats/&lt;int:beat_id&gt;/rss/&quot;</span><span class=\"p\">,</span> <span class=\"n\">BeatFeed</span><span class=\"p\">()),</span>\n</code></pre></div>\n<p>Seperti sebuah tampilan, argumen-argumen dalam URL dilewatkan ke metode <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code> bersama dengan obyek diminta.</p>\n<p>Ini adalah kode untuk umpan kalah-khusus:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BeatFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">description_template</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;feeds/beat_description.html&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">beat_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Beat</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">beat_id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Police beat central: Crimes for beat </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">beat</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Crimes recently reported in police beat </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">beat</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Crime</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">beat</span><span class=\"o\">=</span><span class=\"n\">obj</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-crime_date&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">30</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>To generate the feed's <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;title&gt;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>, Django\nuses the <code class=\"docutils literal notranslate\"><span class=\"pre\">title()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">link()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">description()</span></code> methods. In\nthe previous example, they were string class attributes, but this example\nillustrates that they can be either strings <em>or</em> methods. For each of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code>, Django follows this\nalgorithm:</p>\n<ul class=\"simple\">\n<li><p>Pertama, itu mencoba memanggil semua metode, melewatkan argumen <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code>, dimana <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> adalah obyek dikembalikan oleh <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code>.</p></li>\n<li><p>Kegagalan itu, itu mencoba memanggil metode tanpa argumen.</p></li>\n<li><p>Kegagalan itu, itu menggunakan atribut kelas.</p></li>\n</ul>\n<p>Juga catat bahwa <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> juga mengikuti algoritma sama -- pertama, itu mencoba <code class=\"docutils literal notranslate\"><span class=\"pre\">items(obj)</span></code>, kemudian <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>, lalu akhirnya atribut kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> (yang harus berupa list).</p>\n<p>We are using a template for the item descriptions. It can be as minimal as\nthis:</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\">obj.description</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Bagaimanapun, anda bebas menambahkan bentuk seperti diinginkan.</p>\n<p>Kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">ExampleFeed</span></code> dibawah memberikan dokumentasi penuh pada metode dan atribut dari kelas-kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a>.</p>\n</section>\n<section id=\"specifying-the-type-of-feed\">\n<h3>Menentukan jenis dari umpan<a class=\"heading-anchor\" href=\"#specifying-the-type-of-feed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Seperti awalan, umpan-umpan dihasilkan dalam kerangka kerja ini menggunakan RSS 2.0.</p>\n<p>Untuk merubah itu, tambah sebuah atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code> ke kelas class:~django.contrib.syndication.views.Feed anda, 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><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.feedgenerator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Atom1Feed</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">feed_type</span> <span class=\"o\">=</span> <span class=\"n\">Atom1Feed</span>\n</code></pre></div>\n<p>Catat bahwa mensetel <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code> pada sebuah obyek kelas, bukan sebuah instance.</p>\n<p>Saat ini jenis umpan tersedia adalah:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Rss201rev2Feed\" title=\"django.utils.feedgenerator.Rss201rev2Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.Rss201rev2Feed</span></code></a> (RSS 2.01. Awal.)</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.RssUserland091Feed\" title=\"django.utils.feedgenerator.RssUserland091Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.RssUserland091Feed</span></code></a> (RSS 0.91.)</p></li>\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Atom1Feed\" title=\"django.utils.feedgenerator.Atom1Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.Atom1Feed</span></code></a> (Atom 1.0.)</p></li>\n</ul>\n</section>\n<section id=\"enclosures\">\n<h3>Lampiran<a class=\"heading-anchor\" href=\"#enclosures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Untuk menentukan penutup, seperti yang digunakan dalam membuat umpan podcast , gunakan kaitan <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosures</span></code> atau, cara lain dan jika anda hanya mempunyai penutup tunggal per barang, kaitan <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosure_url</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosure_length</span></code>, dan <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosure_mime_type</span></code>. Lihat kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">ExampleFeed</span></code> dibawah untuk contoh penggunaan.</p>\n</section>\n<section id=\"language\">\n<h3>Bahasa<a class=\"heading-anchor\" href=\"#language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Feeds created by the syndication framework automatically include the\nappropriate <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;language&gt;</span></code> tag (RSS 2.0) or <code class=\"docutils literal notranslate\"><span class=\"pre\">xml:lang</span></code> attribute (Atom). By\ndefault, this is <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.translation.get_language\" title=\"django.utils.translation.get_language\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.get_language()</span></code></a>. You can change it\nby setting the <code class=\"docutils literal notranslate\"><span class=\"pre\">language</span></code> class attribute.</p>\n</section>\n<section id=\"urls\">\n<h3>URL<a class=\"heading-anchor\" href=\"#urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> method/attribute can return either an absolute path (e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;/blog/&quot;</span></code>) or a URL with the fully-qualified domain and protocol (e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;https://www.example.com/blog/&quot;</span></code>). If <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> doesn't return the domain,\nthe syndication framework will insert the domain of the current site, according\nto your <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span> <span class=\"pre\">setting</span></code></a>.</p>\n<p>Umpan-umpan atom membutuhkan sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link</span> <span class=\"pre\">rel=&quot;self&quot;&gt;</span></code> yang menentukan tempat saat ini umpan. Kerangka kerja persengkongkolan mengumpulkan ini otomatis, menggunakan ranah dari situs saat ini menurut pada pengaturan <a class=\"reference internal\" href=\"/id/5.2/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a>.</p>\n</section>\n<section id=\"publishing-atom-and-rss-feeds-in-tandem\">\n<h3>menerbitkan Atom dan umpan RSS secara berduaan<a class=\"heading-anchor\" href=\"#publishing-atom-and-rss-feeds-in-tandem\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Some developers like to make available both Atom <em>and</em> RSS versions of their\nfeeds. To do that, you can create a subclass of your\n<a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a> class and set the <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code>\nto something different. Then update your URLconf to add the extra versions.</p>\n<p>Ini adalah contoh lengkap:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">policebeat.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NewsItem</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.feedgenerator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Atom1Feed</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RssSiteNewsFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Police beat site news&quot;</span>\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/sitenews/&quot;</span>\n    <span class=\"n\">description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Updates on changes and additions to police beat central.&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">NewsItem</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-pub_date&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AtomSiteNewsFeed</span><span class=\"p\">(</span><span class=\"n\">RssSiteNewsFeed</span><span class=\"p\">):</span>\n    <span class=\"n\">feed_type</span> <span class=\"o\">=</span> <span class=\"n\">Atom1Feed</span>\n    <span class=\"n\">subtitle</span> <span class=\"o\">=</span> <span class=\"n\">RssSiteNewsFeed</span><span class=\"o\">.</span><span class=\"n\">description</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Dalam contoh ini, umpan RSS menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> selagi umpan Atom menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code>. Itu karena umpan Atom tidak menyediakan untuk tingkat-umpan &quot;description&quot;, tetapi mereka <em>melakukan</em> menyediakan untuk &quot;subtitle&quot;.</p>\n<p>Jika anda menyediakan sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> dalam kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a> anda, Django <em>tidak</em> akan otomatis menaruh itu kedalam unsur <code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code>, karens subjudul dan gambaran adalah tidak perlu hal sama. Sebagai gantinya, anda harus menentukan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code>.</p>\n<p>In the above example, we set the Atom feed's <code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code> to the RSS feed's\n<code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code>, because it's quite short already.</p>\n</aside>\n<p>Dan menemani URLconf:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.feeds</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AtomSiteNewsFeed</span><span class=\"p\">,</span> <span class=\"n\">RssSiteNewsFeed</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;sitenews/rss/&quot;</span><span class=\"p\">,</span> <span class=\"n\">RssSiteNewsFeed</span><span class=\"p\">()),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;sitenews/atom/&quot;</span><span class=\"p\">,</span> <span class=\"n\">AtomSiteNewsFeed</span><span class=\"p\">()),</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"feed-class-reference\">\n<h3>Acuan kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code><a class=\"heading-anchor\" href=\"#feed-class-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.syndication.views.Feed\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">views.</span></span><span class=\"sig-name descname\"><span class=\"pre\">Feed</span></span><a class=\"heading-anchor\" href=\"#django.contrib.syndication.views.Feed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Contoh ini menggambarkan semua kemungkinan atribut dan metode untuk sebuah kelas <a class=\"reference internal\" href=\"#django.contrib.syndication.views.Feed\" title=\"django.contrib.syndication.views.Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Feed</span></code></a>.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">feedgenerator</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ExampleFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"c1\"># FEED TYPE -- Optional. This should be a class that subclasses</span>\n    <span class=\"c1\"># django.utils.feedgenerator.SyndicationFeed. This designates</span>\n    <span class=\"c1\"># which type of feed this should be: RSS 2.0, Atom 1.0, etc. If</span>\n    <span class=\"c1\"># you don&#39;t specify feed_type, your feed will be RSS 2.0. This</span>\n    <span class=\"c1\"># should be a class, not an instance of the class.</span>\n\n    <span class=\"n\">feed_type</span> <span class=\"o\">=</span> <span class=\"n\">feedgenerator</span><span class=\"o\">.</span><span class=\"n\">Rss201rev2Feed</span>\n\n    <span class=\"c1\"># TEMPLATE NAMES -- Optional. These should be strings</span>\n    <span class=\"c1\"># representing names of Django templates that the system should</span>\n    <span class=\"c1\"># use in rendering the title and description of your feed items.</span>\n    <span class=\"c1\"># Both are optional. If a template is not specified, the</span>\n    <span class=\"c1\"># item_title() or item_description() methods are used instead.</span>\n\n    <span class=\"n\">title_template</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">description_template</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"c1\"># LANGUAGE -- Optional. This should be a string specifying a language</span>\n    <span class=\"c1\"># code. Defaults to django.utils.translation.get_language().</span>\n    <span class=\"n\">language</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;de&quot;</span>\n\n    <span class=\"c1\"># TITLE -- One of the following three is required. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the</span>\n<span class=\"sd\">        feed&#39;s title as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s title as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;foo&quot;</span>  <span class=\"c1\"># Hard-coded title.</span>\n\n    <span class=\"c1\"># LINK -- One of the following three is required. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        # Takes the object returned by get_object() and returns the URL</span>\n<span class=\"sd\">        # of the HTML version of the feed as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the URL of the HTML version of the feed as a normal Python</span>\n<span class=\"sd\">        string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/blog/&quot;</span>  <span class=\"c1\"># Hard-coded URL.</span>\n\n    <span class=\"c1\"># FEED_URL -- One of the following three is optional. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        # Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        # own URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s own URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">feed_url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/blog/rss/&quot;</span>  <span class=\"c1\"># Hard-coded URL.</span>\n\n    <span class=\"c1\"># GUID -- One of the following three is optional. The framework looks</span>\n    <span class=\"c1\"># for them in this order. This property is only used for Atom feeds</span>\n    <span class=\"c1\"># (where it is the feed-level ID element). If not provided, the feed</span>\n    <span class=\"c1\"># link is used as the ID.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_guid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the globally</span>\n<span class=\"sd\">        unique ID for the feed as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_guid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s globally unique ID as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">feed_guid</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/foo/bar/1234&quot;</span>  <span class=\"c1\"># Hard-coded guid.</span>\n\n    <span class=\"c1\"># DESCRIPTION -- One of the following three is required. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        description as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s description as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Foo bar baz.&quot;</span>  <span class=\"c1\"># Hard-coded description.</span>\n\n    <span class=\"c1\"># AUTHOR NAME --One of the following three is optional. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        author&#39;s name as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s author&#39;s name as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">author_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Sally Smith&quot;</span>  <span class=\"c1\"># Hard-coded author name.</span>\n\n    <span class=\"c1\"># AUTHOR EMAIL --One of the following three is optional. The framework</span>\n    <span class=\"c1\"># looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        author&#39;s email as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s author&#39;s email as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">author_email</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;test@example.com&quot;</span>  <span class=\"c1\"># Hard-coded author email.</span>\n\n    <span class=\"c1\"># AUTHOR LINK --One of the following three is optional. The framework</span>\n    <span class=\"c1\"># looks for them in this order. In each case, the URL should include</span>\n    <span class=\"c1\"># the scheme (such as &quot;https://&quot;) and domain name.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        author&#39;s URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">author_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s author&#39;s URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">author_link</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://www.example.com/&quot;</span>  <span class=\"c1\"># Hard-coded author URL.</span>\n\n    <span class=\"c1\"># CATEGORIES -- One of the following three is optional. The framework</span>\n    <span class=\"c1\"># looks for them in this order. In each case, the method/attribute</span>\n    <span class=\"c1\"># should return an iterable object that returns strings.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">categories</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        categories as iterable over strings.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">categories</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s categories as iterable over strings.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">categories</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;python&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># Hard-coded list of categories.</span>\n\n    <span class=\"c1\"># COPYRIGHT NOTICE -- One of the following three is optional. The</span>\n    <span class=\"c1\"># framework looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_copyright</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        copyright notice as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">feed_copyright</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s copyright notice as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">feed_copyright</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Copyright (c) 2007, Sally Smith&quot;</span>  <span class=\"c1\"># Hard-coded copyright notice.</span>\n\n    <span class=\"c1\"># TTL -- One of the following three is optional. The framework looks</span>\n    <span class=\"c1\"># for them in this order. Ignored for Atom feeds.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ttl</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        TTL (Time To Live) as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ttl</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s TTL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">ttl</span> <span class=\"o\">=</span> <span class=\"mi\">600</span>  <span class=\"c1\"># Hard-coded Time To Live.</span>\n\n    <span class=\"c1\"># STYLESHEETS -- Optional. To set, provide one of the following three.</span>\n    <span class=\"c1\"># The framework looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">stylesheets</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns the feed&#39;s</span>\n<span class=\"sd\">        stylesheets (as URL strings or as Stylesheet instances).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">stylesheets</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the feed&#39;s stylesheets (as URL strings or Stylesheet</span>\n<span class=\"sd\">        instances).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># Hardcoded stylesheets.</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;/stylesheet1.xsl&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;stylesheet2.xsl&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"c1\"># ITEMS -- One of the following three is required. The framework looks</span>\n    <span class=\"c1\"># for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the object returned by get_object() and returns a list of</span>\n<span class=\"sd\">        items to publish in this feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns a list of items to publish in this feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">items</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Item 1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Item 2&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># Hard-coded items.</span>\n\n    <span class=\"c1\"># GET_OBJECT -- This is required for feeds that publish different data</span>\n    <span class=\"c1\"># for different URL parameters. (See &quot;A complex example&quot; above.)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes the current request and the arguments from the URL, and</span>\n<span class=\"sd\">        returns an object represented by this feed. Raises</span>\n<span class=\"sd\">        django.core.exceptions.ObjectDoesNotExist on error.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># ITEM TITLE AND DESCRIPTION -- If title_template or</span>\n    <span class=\"c1\"># description_template are not defined, these are used instead. Both are</span>\n    <span class=\"c1\"># optional, by default they will use the string representation of the</span>\n    <span class=\"c1\"># item.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        title as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the title for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Breaking News: Nothing Happening&quot;</span>  <span class=\"c1\"># Hard-coded title.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        description as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_description</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the description for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;A description of the item.&quot;</span>  <span class=\"c1\"># Hard-coded description.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns a dictionary to use as extra context if either</span>\n<span class=\"sd\">        description_template or item_template are used.</span>\n\n<span class=\"sd\">        Default implementation preserves the old behavior</span>\n<span class=\"sd\">        of using {&#39;obj&#39;: item, &#39;site&#39;: current_site} as the context.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># ITEM LINK -- One of these three is required. The framework looks for</span>\n    <span class=\"c1\"># them in this order.</span>\n\n    <span class=\"c1\"># First, the framework tries the two methods below, in</span>\n    <span class=\"c1\"># order. Failing that, it falls back to the get_absolute_url()</span>\n    <span class=\"c1\"># method on each item returned by items().</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s URL.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the URL for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># ITEM_GUID -- The following method is optional. If not provided, the</span>\n    <span class=\"c1\"># item&#39;s link is used by default.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_guid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as return by items(), and returns the item&#39;s ID.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># ITEM_GUID_IS_PERMALINK -- The following method is optional. If</span>\n    <span class=\"c1\"># provided, it sets the &#39;isPermaLink&#39; attribute of an item&#39;s</span>\n    <span class=\"c1\"># GUID element. This method is used only when &#39;item_guid&#39; is</span>\n    <span class=\"c1\"># specified.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_guid_is_permalink</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns a boolean.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_guid_is_permalink</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>  <span class=\"c1\"># Hard coded value</span>\n\n    <span class=\"c1\"># ITEM AUTHOR NAME -- One of the following three is optional. The</span>\n    <span class=\"c1\"># framework looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        author&#39;s name as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the author name for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_author_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Sally Smith&quot;</span>  <span class=\"c1\"># Hard-coded author name.</span>\n\n    <span class=\"c1\"># ITEM AUTHOR EMAIL --One of the following three is optional. The</span>\n    <span class=\"c1\"># framework looks for them in this order.</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># If you specify this, you must specify item_author_name.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        author&#39;s email as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the author email for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_author_email</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;test@example.com&quot;</span>  <span class=\"c1\"># Hard-coded author email.</span>\n\n    <span class=\"c1\"># ITEM AUTHOR LINK -- One of the following three is optional. The</span>\n    <span class=\"c1\"># framework looks for them in this order. In each case, the URL should</span>\n    <span class=\"c1\"># include the scheme (such as &quot;https://&quot;) and domain name.</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># If you specify this, you must specify item_author_name.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        author&#39;s URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_author_link</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the author URL for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_author_link</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://www.example.com/&quot;</span>  <span class=\"c1\"># Hard-coded author URL.</span>\n\n    <span class=\"c1\"># ITEM ENCLOSURES -- One of the following three is optional. The</span>\n    <span class=\"c1\"># framework looks for them in this order. If one of them is defined,</span>\n    <span class=\"c1\"># ``item_enclosure_url``, ``item_enclosure_length``, and</span>\n    <span class=\"c1\"># ``item_enclosure_mime_type`` will have no effect.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosures</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns a list of</span>\n<span class=\"sd\">        ``django.utils.feedgenerator.Enclosure`` objects.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosures</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the ``django.utils.feedgenerator.Enclosure`` list for every</span>\n<span class=\"sd\">        item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_enclosures</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>  <span class=\"c1\"># Hard-coded enclosure list</span>\n\n    <span class=\"c1\"># ITEM ENCLOSURE URL -- One of these three is required if you&#39;re</span>\n    <span class=\"c1\"># publishing enclosures and you&#39;re not using ``item_enclosures``. The</span>\n    <span class=\"c1\"># framework looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        enclosure URL.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the enclosure URL for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_enclosure_url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/foo/bar.mp3&quot;</span>  <span class=\"c1\"># Hard-coded enclosure link.</span>\n\n    <span class=\"c1\"># ITEM ENCLOSURE LENGTH -- One of these three is required if you&#39;re</span>\n    <span class=\"c1\"># publishing enclosures and you&#39;re not using ``item_enclosures``. The</span>\n    <span class=\"c1\"># framework looks for them in this order. In each case, the returned</span>\n    <span class=\"c1\"># value should be either an integer, or a string representation of the</span>\n    <span class=\"c1\"># integer, in bytes.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_length</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        enclosure length.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_length</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the enclosure length for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_enclosure_length</span> <span class=\"o\">=</span> <span class=\"mi\">32000</span>  <span class=\"c1\"># Hard-coded enclosure length.</span>\n\n    <span class=\"c1\"># ITEM ENCLOSURE MIME TYPE -- One of these three is required if you&#39;re</span>\n    <span class=\"c1\"># publishing enclosures and you&#39;re not using ``item_enclosures``. The</span>\n    <span class=\"c1\"># framework looks for them in this order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_mime_type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        enclosure MIME type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_enclosure_mime_type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the enclosure MIME type for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_enclosure_mime_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;audio/mpeg&quot;</span>  <span class=\"c1\"># Hard-coded enclosure MIME type.</span>\n\n    <span class=\"c1\"># ITEM PUBDATE -- It&#39;s optional to use one of these three. This is a</span>\n    <span class=\"c1\"># hook that specifies how to get the pubdate for a given item.</span>\n    <span class=\"c1\"># In each case, the method/attribute should return a Python</span>\n    <span class=\"c1\"># datetime.datetime object.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_pubdate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        pubdate.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_pubdate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the pubdate for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_pubdate</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># Hard-coded pubdate.</span>\n\n    <span class=\"c1\"># ITEM UPDATED -- It&#39;s optional to use one of these three. This is a</span>\n    <span class=\"c1\"># hook that specifies how to get the updateddate for a given item.</span>\n    <span class=\"c1\"># In each case, the method/attribute should return a Python</span>\n    <span class=\"c1\"># datetime.datetime object.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_updateddate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        updateddate.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_updateddate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the updateddate for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_updateddate</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># Hard-coded updateddate.</span>\n\n    <span class=\"c1\"># ITEM CATEGORIES -- It&#39;s optional to use one of these three. This is</span>\n    <span class=\"c1\"># a hook that specifies how to get the list of categories for a given</span>\n    <span class=\"c1\"># item. In each case, the method/attribute should return an iterable</span>\n    <span class=\"c1\"># object that returns strings.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_categories</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        categories.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_categories</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the categories for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_categories</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;python&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># Hard-coded categories.</span>\n\n    <span class=\"c1\"># ITEM COPYRIGHT NOTICE (only applicable to Atom feeds) -- One of the</span>\n    <span class=\"c1\"># following three is optional. The framework looks for them in this</span>\n    <span class=\"c1\"># order.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_copyright</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        copyright notice as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_copyright</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the copyright notice for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_copyright</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Copyright (c) 2007, Sally Smith&quot;</span>  <span class=\"c1\"># Hard-coded copyright notice.</span>\n\n    <span class=\"c1\"># ITEM COMMENTS URL -- It&#39;s optional to use one of these three. This is</span>\n    <span class=\"c1\"># a hook that specifies how to get the URL of a page for comments for a</span>\n    <span class=\"c1\"># given item.</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_comments</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Takes an item, as returned by items(), and returns the item&#39;s</span>\n<span class=\"sd\">        comments URL as a normal Python string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">item_comments</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the comments URL for every item in the feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n    <span class=\"n\">item_comments</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;https://www.example.com/comments&quot;</span>  <span class=\"c1\"># Hard-coded comments URL</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"the-low-level-framework\">\n<h2>Kerangka kerja tingkat-rendah<a class=\"heading-anchor\" href=\"#the-low-level-framework\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Behind the scenes, the high-level RSS framework uses a lower-level framework\nfor generating feeds' XML. This framework lives in a single module:\n<a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.2.x/django/utils/feedgenerator.py\">django/utils/feedgenerator.py</a>.</p>\n<p>Anda menggunakan kerangka kerja ini pada milik anda, untuk pembangkitan umpan tingkat-rendah. Anda dapat juga membuat pembangkit umpan penyesuaian subkelas-subkelas untuk digunakan dengan pilihan  <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code>.</p>\n<section id=\"syndicationfeed-classes\">\n<h3>Kelas-kelas <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></code><a class=\"heading-anchor\" href=\"#syndicationfeed-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Modul <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#module-django.utils.feedgenerator\" title=\"django.utils.feedgenerator: Syndication feed generation library -- used for generating RSS, etc.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">feedgenerator</span></code></a> megnandung kelas dasar:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.SyndicationFeed\" title=\"django.utils.feedgenerator.SyndicationFeed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.SyndicationFeed</span></code></a></p></li>\n</ul>\n<p>dan beberapa subkelas:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.RssUserland091Feed\" title=\"django.utils.feedgenerator.RssUserland091Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.RssUserland091Feed</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Rss201rev2Feed\" title=\"django.utils.feedgenerator.Rss201rev2Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.Rss201rev2Feed</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Atom1Feed\" title=\"django.utils.feedgenerator.Atom1Feed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.Atom1Feed</span></code></a></p></li>\n</ul>\n<p>Setiap dari ketiga kelas ini mengetahui bagaimana membangun jenis tertentu dari umpan sebagai XML. Mereka berbagi antarmuka ini:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.SyndicationFeed.__init__\" title=\"django.utils.feedgenerator.SyndicationFeed.__init__\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.__init__()</span></code></a></dt><dd><p>Awalkan umpan dengan direktori yang diberikan dari metadata, yang berlaku ke seluruh umpan. Argumen kata kunci yang dibutuhkan adalah:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code></p></li>\n</ul>\n<p>Ada juga banyak dari katakunci pilihan lain:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">language</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_email</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_name</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_link</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">subtitle</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">feed_url</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">feed_copyright</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">feed_guid</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ttl</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code></p></li>\n</ul>\n<p>Argumen kata kunci tambahan apapun anda lewatkan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> akan disimpan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">self.feed</span></code> untuk digunakan dengan <a class=\"reference internal\" href=\"#custom-feed-generators\">custom feed generators</a>.</p>\n<p>All parameters should be strings, except for two:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code> harus berupa urutan string.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code> should be a sequence of either strings or\n<a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Stylesheet\" title=\"django.utils.feedgenerator.Stylesheet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Stylesheet</span></code></a> instances.</p></li>\n</ul>\n<p>Beware that some control characters are\n<a class=\"reference external\" href=\"https://www.w3.org/International/questions/qa-controls\">not allowed</a> in\nXML documents. If your content has some of them, you might encounter a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(di Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> when producing the feed.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code> argument was added.</p>\n</aside>\n</dd>\n<dt><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.SyndicationFeed.add_item\" title=\"django.utils.feedgenerator.SyndicationFeed.add_item\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.add_item()</span></code></a></dt><dd><p>Tambah sebuah barang ke umpan dengan parameter yang diberikan.</p>\n<p>Argumen kata kunci yang diwajibkan adalah:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code></p></li>\n</ul>\n<p>Argumen kata kunci pilihan adalah:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_email</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_name</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">author_link</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pubdate</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">comments</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">unique_id</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">enclosures</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">item_copyright</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ttl</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">updateddate</span></code></p></li>\n</ul>\n<p>Argumen kata kunci tambahan akan disimpan untuk <a class=\"reference internal\" href=\"#custom-feed-generators\">custom feed generators</a>.</p>\n<p>Semua parameter, jika diberikan, harus berupa string, kecuali:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pubdate</span></code> seharusnya obyek <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> Python.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">updateddate</span></code> seharusnya obyek <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> Python.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">enclosures</span></code> harus berupa list dari instance <a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Enclosure\" title=\"django.utils.feedgenerator.Enclosure\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.utils.feedgenerator.Enclosure</span></code></a> .</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code> harus berupa urutan string.</p></li>\n</ul>\n</dd>\n<dt><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.SyndicationFeed.write\" title=\"django.utils.feedgenerator.SyndicationFeed.write\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.write()</span></code></a></dt><dd><p>Keluaran umpan dalam penyandian diberikan ke outfile, yang adalah obyek seperti-berkas.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.SyndicationFeed.writeString\" title=\"django.utils.feedgenerator.SyndicationFeed.writeString\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.writeString()</span></code></a></dt><dd><p>Mengembalikan umpan sebagai string dalam penyandian yang diberikan.</p>\n</dd>\n</dl>\n<p>For example, to create an Atom 1.0 feed and print it to standard output:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">feedgenerator</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">feedgenerator</span><span class=\"o\">.</span><span class=\"n\">Atom1Feed</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;My Blog&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">link</span><span class=\"o\">=</span><span class=\"s2\">&quot;https://www.example.com/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">description</span><span class=\"o\">=</span><span class=\"s2\">&quot;In which I write about what I ate today.&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">language</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">author_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Myself&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">feed_url</span><span class=\"o\">=</span><span class=\"s2\">&quot;https://example.com/atom.xml&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_item</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Hot dog today&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">link</span><span class=\"o\">=</span><span class=\"s2\">&quot;https://www.example.com/entries/1/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pubdate</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">description</span><span class=\"o\">=</span><span class=\"s2\">&quot;&lt;p&gt;Today I had a Vienna Beef hot dog. It was pink, plump and perfect.&lt;/p&gt;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">writeString</span><span class=\"p\">(</span><span class=\"s2\">&quot;UTF-8&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>\n<span class=\"go\">&lt;feed xmlns=&quot;http://www.w3.org/2005/Atom&quot; xml:lang=&quot;en&quot;&gt;</span>\n<span class=\"go\">...</span>\n<span class=\"go\">&lt;/feed&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"custom-feed-generators\">\n<h3>Pembangkit umpan penyesuaian<a class=\"heading-anchor\" href=\"#custom-feed-generators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda butuh menghasilkan bentuk umpan penyesuaian, anda mendapatkan sepasang pilihan.</p>\n<p>Jika bentuk umpan sama sekali penyesuaian, anda akan ingin mensubkelaskan <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></code> dan sama sekali mengganti metode <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">writeString()</span></code>.</p>\n<p>Bagaimanapun, jika bentuk umpan adalah berputar dari RSS atau Atom (yaitu <a class=\"reference external\" href=\"https://georss.org\">GeoRSS</a>, <a class=\"reference external\" href=\"https://help.apple.com/itc/podcasts_connect/#/itcb54353390\">iTunes podcast format</a> Apple, dll.), anda mendapatkan pilihan lebih baik. Jenis-jenis ini dari umpan khususnya menambahkan unsur-unsur tambahan dan/atau atribut pada bentuk pokok, dan ada kumpulan dari metode yang <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></code> panggil untuk mendapatkan atribut tambahan ini. Dengan demikian, anda dapat mensubkelaskan kelas pembangkit umpan sesuai (<code class=\"docutils literal notranslate\"><span class=\"pre\">Atom1Feed</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">Rss201rev2Feed</span></code>) dan memperpanjang callback ini. mereka adalah:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.root_attributes(self)</span></code></dt><dd><p>Mengembalikan atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> untuk menamabhkan ke unsur umpan akar (<code class=\"docutils literal notranslate\"><span class=\"pre\">feed</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">channel</span></code>).</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.add_root_elements(self,</span> <span class=\"pre\">handler)</span></code></dt><dd><p>Callback untuk menambahkan unsur-unsur didalam akar unsur umpan (<code class=\"docutils literal notranslate\"><span class=\"pre\">feed</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">channel</span></code>). <code class=\"docutils literal notranslate\"><span class=\"pre\">handler</span></code> adalah sebuah <a class=\"reference external\" href=\"https://docs.python.org/3/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">XMLGenerator</span></code></a> dari pustaka SAX Python siap-pakai; anda dapat memanggil metode pada itu untuk menambahkan dokumen XML dalam pengolahan.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.item_attributes(self,</span> <span class=\"pre\">item)</span></code></dt><dd><p>Mengembalikan sebuah atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> untuk menambahkan ke setiap unsur barang (<code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>). Argumen, <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>, adalah sebuah dictionary dari semua data dilewatkan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.add_item()</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.add_item_elements(self,</span> <span class=\"pre\">handler,</span> <span class=\"pre\">item)</span></code></dt><dd><p>Callback pada tambah untus pada setiap unsur barang (<code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>). <code class=\"docutils literal notranslate\"><span class=\"pre\">handler</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code> seperti diatas.</p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Jika anda menimpa apapund ari metode ini, pastikan memanggil metode super kelas sejak mereka menambah unsur-unsur persyaratan untuk setiap bentuk umpan.</p>\n</aside>\n<p>Sebagai contoh, anda mungkin memulai menerapkan pembangkit umpan RSS iTunes 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><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">iTunesFeed</span><span class=\"p\">(</span><span class=\"n\">Rss201rev2Feed</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">root_attributes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">attrs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">root_attributes</span><span class=\"p\">()</span>\n        <span class=\"n\">attrs</span><span class=\"p\">[</span><span class=\"s2\">&quot;xmlns:itunes&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;http://www.itunes.com/dtds/podcast-1.0.dtd&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">attrs</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">add_root_elements</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">handler</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">add_root_elements</span><span class=\"p\">(</span><span class=\"n\">handler</span><span class=\"p\">)</span>\n        <span class=\"n\">handler</span><span class=\"o\">.</span><span class=\"n\">addQuickElement</span><span class=\"p\">(</span><span class=\"s2\">&quot;itunes:explicit&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;clean&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>There's a lot more work to be done for a complete custom feed class, but the\nabove example should demonstrate the basic idea.</p>\n</section>\n<section id=\"feed-stylesheets\">\n<span id=\"id1\"></span><h3>Feed stylesheets<a class=\"heading-anchor\" href=\"#feed-stylesheets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>If you wish to have your RSS feed render nicely in a browser, you will need to\nprovide styling information for the XML file, typically in <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/XSLT/Transforming_XML_with_XSLT\">XSLT</a> or CSS\nformats.</p>\n<p>You can add this to your RSS feed by setting the <code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code> attribute on\nthe feed class.</p>\n<p>This can be a hardcoded URL:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FeedWithHardcodedStylesheet</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"s2\">&quot;https://example.com/rss_stylesheet.xslt&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>You can also use Django's static files system:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.templatetags.static</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">static</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FeedWithStaticFileStylesheet</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">static</span><span class=\"p\">(</span><span class=\"s2\">&quot;rss_styles.xslt&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Another option is to have a view in your project that renders the XSLT\ndocument. You can then link it like so:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse_lazy</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FeedWithStylesheetView</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s2\">&quot;your-custom-view-name&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Django will normally try to guess the MIME type of the given URL based on its\nextension, but if that fails you can specify it using the\n<a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Stylesheet\" title=\"django.utils.feedgenerator.Stylesheet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Stylesheet</span></code></a> class:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.feedgenerator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Stylesheet</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FeedWithHardcodedStylesheet</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">Stylesheet</span><span class=\"p\">(</span><span class=\"s2\">&quot;https://example.com/rss_stylesheet&quot;</span><span class=\"p\">,</span> <span class=\"n\">mimetype</span><span class=\"o\">=</span><span class=\"s2\">&quot;text/xsl&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Similarly, if you'd like to use a different <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> attribute than <code class=\"docutils literal notranslate\"><span class=\"pre\">screen</span></code>\n(Django's default), you can use the\n<a class=\"reference internal\" href=\"/id/5.2/ref/utils/#django.utils.feedgenerator.Stylesheet\" title=\"django.utils.feedgenerator.Stylesheet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Stylesheet</span></code></a> class again:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.feedgenerator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Stylesheet</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FeedWithHardcodedStylesheet</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">Stylesheet</span><span class=\"p\">(</span><span class=\"s2\">&quot;https://example.com/rss_stylesheet.xslt&quot;</span><span class=\"p\">,</span> <span class=\"n\">media</span><span class=\"o\">=</span><span class=\"s2\">&quot;print&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Any of these options can be combined when using multiple stylesheets:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.syndication.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Feed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.feedgenerator</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Stylesheet</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultiStylesheetFeed</span><span class=\"p\">(</span><span class=\"n\">Feed</span><span class=\"p\">):</span>\n    <span class=\"n\">stylesheets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"s2\">&quot;/stylesheet1.xsl&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">Stylesheet</span><span class=\"p\">(</span><span class=\"s2\">&quot;/stylesheet2.xsl&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>","rootId":"module-django.contrib.syndication","toc":[{"title":"Kerangka kerja tingkat-tinggi","anchor":"the-high-level-framework","children":[{"title":"Ikhtisar","anchor":"overview","children":[]},{"title":"Kelas-kelas Feed","anchor":"feed-classes","children":[]},{"title":"Sebuah contoh sederhana","anchor":"a-simple-example","children":[]},{"title":"Sebuah contoh rumit","anchor":"a-complex-example","children":[]},{"title":"Menentukan jenis dari umpan","anchor":"specifying-the-type-of-feed","children":[]},{"title":"Lampiran","anchor":"enclosures","children":[]},{"title":"Bahasa","anchor":"language","children":[]},{"title":"URL","anchor":"urls","children":[]},{"title":"menerbitkan Atom dan umpan RSS secara berduaan","anchor":"publishing-atom-and-rss-feeds-in-tandem","children":[]},{"title":"Acuan kelas Feed","anchor":"feed-class-reference","children":[]}]},{"title":"Kerangka kerja tingkat-rendah","anchor":"the-low-level-framework","children":[{"title":"Kelas-kelas SyndicationFeed","anchor":"syndicationfeed-classes","children":[]},{"title":"Pembangkit umpan penyesuaian","anchor":"custom-feed-generators","children":[]},{"title":"Feed stylesheets","anchor":"feed-stylesheets","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/5.2/ref/"},{"docname":"ref/contrib/index","title":"Paket contrib","url":"/id/5.2/ref/contrib/"}],"prev":{"docname":"ref/contrib/staticfiles","title":"Aplikasi staticfiles","url":"/id/5.2/ref/contrib/staticfiles/"},"next":{"docname":"ref/csrf","title":"Perlindungan Cross Site Request Forgery","url":"/id/5.2/ref/csrf/"},"formats":{"html":"/id/5.2/ref/contrib/syndication/","markdown":"/id/5.2/ref/contrib/syndication.md","json":"/id/5.2/ref/contrib/syndication.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/contrib/syndication.txt","official":"https://docs.djangoproject.com/id/5.2/ref/contrib/syndication/","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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}