{"title":"Ramverket för syndikeringsflöden","version":"6.1","locale":"sv","docname":"ref/contrib/syndication","url":"/sv/6.1/ref/contrib/syndication/","canonical":"https://djangodocs.dev/sv/6.1/ref/contrib/syndication/","summary":"Django levereras med ett ramverk för generering av syndikeringsflöden på hög nivå för att skapa RSS - och Atom -flöden. Allt du behöver göra för att skapa ett…","html":"<span id=\"the-syndication-feed-framework\"></span><h1>Ramverket för syndikeringsflöden<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 levereras med ett ramverk för generering av syndikeringsflöden på hög nivå för att skapa <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Glossary/RSS\">RSS</a>- och <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4287.html\"><strong>Atom</strong></a>-flöden.</p>\n<p>Allt du behöver göra för att skapa ett syndikeringsflöde är att skriva en kort Python-klass. Du kan skapa så många flöden du vill.</p>\n<p>Django levereras också med ett API för flödesgenerering på lägre nivå. Använd detta om du vill generera flöden utanför en webbkontext eller på något annat sätt på lägre nivå.</p>\n<section id=\"the-high-level-framework\">\n<h2>Ramverket på hög nivå<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>Översikt<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det högnivåramverk som genererar flöden tillhandahålls av klassen <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>. För att skapa ett flöde, skriv en <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>-klass och peka på en instans av den i din <a class=\"reference internal\" href=\"/sv/6.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>.</p>\n</section>\n<section id=\"feed-classes\">\n<h3>klasserna <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>En <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>-klass är en Python-klass som representerar ett syndikeringsflöde. Ett flöde kan vara enkelt (t.ex. ett flöde för ”webbplatsnyheter” eller ett grundläggande flöde som visar de senaste inläggen på en blogg) eller mer komplext (t.ex. ett flöde som visar alla blogginlägg i en viss kategori, där kategorin är variabel).</p>\n<p>Feed-klasser underklassar <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>. De kan finnas var som helst i din kodbas.</p>\n<p>Instanser av klasserna <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> är vyer som kan användas i ditt <a class=\"reference internal\" href=\"/sv/6.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>.</p>\n</section>\n<section id=\"a-simple-example\">\n<h3>Ett enkelt exempel<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>Detta enkla exempel, som hämtats från en hypotetisk webbplats för nyheter om polispatruller, beskriver ett flöde med de fem senaste nyheterna:</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>Om du vill ansluta en URL till detta flöde lägger du till en instans av Feed-objektet i ditt <a class=\"reference internal\" href=\"/sv/6.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>. Till exempel:</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>Anteckning:</p>\n<ul class=\"simple\">\n<li><p>Feed-klassen är en underklass till <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> och <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> motsvarar standard RSS-elementen <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> respektive <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> är en metod som returnerar en lista med objekt som ska ingå i flödet som <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;item&gt;</span></code> element. Även om detta exempel returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">NewsItem</span></code>-objekt med hjälp av Djangos <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/\"><span class=\"doc\">object-relational mapper</span></a>, behöver <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> inte returnera modellinstanser. Även om du får några bitar av funktionalitet ”gratis” genom att använda Django-modeller, kan <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> returnera vilken typ av objekt du vill.</p></li>\n<li><p>Om du skapar ett Atom-flöde i stället för ett RSS-flöde anger du attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">undertitel</span></code> i stället för attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">beskrivning</span></code>. Se <a class=\"reference internal\" href=\"#publishing-atom-and-rss-feeds-in-tandem\">Publicera Atom- och RSS-flöden parallellt</a> senare för ett exempel.</p></li>\n</ul>\n<p>En sak är kvar att göra. I ett RSS-flöde har varje <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;item&gt;</span></code> en <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> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code>. Vi måste tala om för ramverket vilka data som ska läggas in i dessa element.</p>\n<ul>\n<li><p>För innehållet i <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;title&gt;</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code> försöker Django anropa metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">item_title()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">item_description()</span></code> på <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>-klassen. De får en enda parameter, <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>, som är själva objektet. Dessa är valfria; som standard används strängrepresentationen av objektet för båda.</p>\n<p>Om du vill göra någon speciell formatering för antingen titeln eller beskrivningen kan <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/language/\"><span class=\"doc\">Django templates</span></a> användas istället. Deras sökvägar kan anges med attributen <code class=\"docutils literal notranslate\"><span class=\"pre\">title_template</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">description_template</span></code> på klassen <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>. Mallarna återges för varje objekt och skickas till två mallkontextvariabler:</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> – Det aktuella objektet (ett av de objekt som du returnerade i <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> – Ett <a class=\"reference internal\" href=\"/sv/6.1/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>-objekt som representerar den aktuella webbplatsen. Detta är användbart för <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">site.domain</span> <span class=\"pre\">}}</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">site.name</span> <span class=\"pre\">}}</span></code>. Om du <em>inte</em> har Django sites-ramverket installerat kommer detta att ställas in till ett <a class=\"reference internal\" href=\"/sv/6.1/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>-objekt. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/sites/#id3\"><span class=\"std std-ref\">RequestSite-avsnittet i dokumentationen för sites-ramverket</span></a> för mer information.</p></li>\n</ul>\n<p>Se <a class=\"reference internal\" href=\"#a-complex-example\">ett komplext exempel</a> nedan som använder en beskrivningsmall.</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>Det finns också ett sätt att skicka ytterligare information till titel- och beskrivningsmallarna, om du behöver ange mer än de två variabler som nämns ovan. Du kan tillhandahålla din implementering av <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data</span></code>-metoden i din <code class=\"docutils literal notranslate\"><span class=\"pre\">Feed</span></code>-underklass. Till exempel:</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>Och mallen:</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>Denna metod kommer att anropas en gång för varje objekt i listan som returneras av <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> med följande nyckelordsargument:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>: det aktuella objektet. Av bakåtkompatibilitetsskäl är namnet på denna kontextvariabel <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>: det objekt som returneras av <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code>. Som standard är detta inte exponerat för mallarna för att undvika förväxling med <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">obj</span> <span class=\"pre\">}}</span></code> (se ovan), men du kan använda det i din implementering av <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>: aktuell plats enligt beskrivningen ovan.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>: aktuell förfrågan.</p></li>\n</ul>\n<p>Beteendet hos <code class=\"docutils literal notranslate\"><span class=\"pre\">get_context_data()</span></code> efterliknar det hos <a class=\"reference internal\" href=\"/sv/6.1/topics/class-based-views/generic-display/#adding-extra-context\"><span class=\"std std-ref\">generic views</span></a> - det är meningen att du ska anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> för att hämta kontextdata från överordnad klass, lägga till dina data och returnera den modifierade ordlistan.</p>\n</li>\n<li><p>To specify the contents of <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code>, you have two options. For each item\nin <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>, Django first tries calling the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> method on the\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. In a similar way to\nthe title and description, it is passed a single parameter,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>. If that method doesn’t exist, Django tries executing a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> method on that object. Both\n<code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> should return the\nitem’s URL as a normal Python string. As with <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code>, the\nresult of <code class=\"docutils literal notranslate\"><span class=\"pre\">item_link()</span></code> will be included directly in the URL, so you\nare responsible for doing all necessary URL quoting and conversion to\nASCII inside the method itself.</p></li>\n</ul>\n</section>\n<section id=\"a-complex-example\">\n<h3>Ett komplext exempel<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>Ramverket stöder också mer komplexa flöden, via argument.</p>\n<p>En webbplats kan till exempel erbjuda ett RSS-flöde med de senaste brotten för varje polisområde i en stad. Det skulle vara dumt att skapa en separat <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>-klass för varje polisområde; det skulle bryta mot <a class=\"reference internal\" href=\"/sv/6.1/misc/design-philosophies/#dry\"><span class=\"std std-ref\">DRY-principen</span></a> och skulle koppla data till programmeringslogik. Istället låter syndikeringsramverket dig komma åt de argument som skickas från din <a class=\"reference internal\" href=\"/sv/6.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> så att flöden kan mata ut objekt baserat på information i flödets URL.</p>\n<p>Polisens beatfeeds kan nås via webbadresser som denna:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/beats/613/rss/</span></code> – Returnerar senaste brott för beat 613.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/beats/1424/rss/</span></code> – Returnerar senaste brott för beat 1424.</p></li>\n</ul>\n<p>Dessa kan matchas med en <a class=\"reference internal\" href=\"/sv/6.1/topics/http/urls/\"><span class=\"doc\">URLconf</span></a> rad såsom:</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>Precis som i en vy skickas argumenten i URL:en till metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code> tillsammans med request-objektet.</p>\n<p>Här är koden för dessa beat-specifika flöden:</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>För att generera flödets <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> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;description&gt;</span></code> använder Django metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">title()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">link()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">description()</span></code>. I det föregående exemplet var de klassattribut för strängar, men det här exemplet illustrerar att de kan vara antingen strängar * eller * metoder. För var och en av <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> följer Django denna algoritm:</p>\n<ul class=\"simple\">\n<li><p>Först försöker den anropa en metod genom att skicka argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code>, där <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> är det objekt som returneras av <code class=\"docutils literal notranslate\"><span class=\"pre\">get_object()</span></code>.</p></li>\n<li><p>Om det inte lyckas försöker den anropa en metod utan argument.</p></li>\n<li><p>Om så inte är fallet används class-attributet.</p></li>\n</ul>\n<p>Observera också att <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code> också följer samma algoritm – först försöker den <code class=\"docutils literal notranslate\"><span class=\"pre\">items(obj)</span></code>, sedan <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>, och slutligen ett <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> klassattribut (som borde vara en lista).</p>\n<p>Vi använder en mall för artikelbeskrivningarna. Den kan vara så minimal som detta:</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>Det står dig dock fritt att lägga till formatering om du så önskar.</p>\n<p>Klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">ExampleFeed</span></code> nedan ger fullständig dokumentation om metoder och attribut för <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> klasserna.</p>\n</section>\n<section id=\"specifying-the-type-of-feed\">\n<h3>Ange typ av foder<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>Som standard använder flöden som produceras i detta ramverk RSS 2.0.</p>\n<p>För att ändra det, lägg till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code>-attribut till din <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>-klass, så här:</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>Observera att du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code> till ett klassobjekt, inte en instans.</p>\n<p>För närvarande finns följande fodertyper tillgängliga:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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. Standard.)</p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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=\"/sv/6.1/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>Inneslutningar<a class=\"heading-anchor\" href=\"#enclosures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill ange bilagor, t.ex. de som används för att skapa podcast-flöden, använder du hook <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosures</span></code> eller, alternativt och om du bara har en enda bilaga per artikel, hooks <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> och <code class=\"docutils literal notranslate\"><span class=\"pre\">item_enclosure_mime_type</span></code>. Se klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">ExampleFeed</span></code> nedan för användningsexempel.</p>\n</section>\n<section id=\"language\">\n<h3>Språk<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=\"/sv/6.1/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\nit by 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:er<a class=\"heading-anchor\" href=\"#urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Metoden/attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> kan returnera antingen en absolut sökväg (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;/blog/&quot;</span></code>) eller en URL med den fullständigt kvalificerade domänen och protokollet (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;https://www.example.com/blog/&quot;</span></code>). Om <code class=\"docutils literal notranslate\"><span class=\"pre\">link</span></code> inte returnerar domänen kommer syndikeringsramverket att infoga domänen för den aktuella webbplatsen, enligt din <a class=\"reference internal\" href=\"/sv/6.1/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>Atom-flöden kräver en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link</span> <span class=\"pre\">rel=&quot;self&quot;&gt;</span></code> som definierar flödets aktuella plats. Syndikeringsramverket fyller i detta automatiskt, med hjälp av domänen för den aktuella webbplatsen enligt inställningen <a class=\"reference internal\" href=\"/sv/6.1/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>Publicera Atom- och RSS-flöden parallellt<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>Vissa utvecklare vill göra både Atom <em>och</em> RSS-versioner av sina flöden tillgängliga. För att göra det kan du skapa en underklass av din <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>-klass och ställa in <code class=\"docutils literal notranslate\"><span class=\"pre\">feed_type</span></code> till något annat. Uppdatera sedan din URLconf för att lägga till de extra versionerna.</p>\n<p>Här är ett fullständigt exempel:</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\">Observera</p>\n<p>I det här exemplet använder RSS-flödet en ”beskrivning” medan Atom-flödet använder en ”undertitel”. Det beror på att Atom-flöden inte tillhandahåller en ”beskrivning” på flödesnivå, men de * tillhandahåller * en ”undertitel”</p>\n<p>Om du tillhandahåller en <code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></code> i din <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>-klass, kommer Django <em>inte</em> automatiskt att lägga in det i <code class=\"docutils literal notranslate\"><span class=\"pre\">undertitel</span></code>-elementet, eftersom en undertitel och beskrivning inte nödvändigtvis är samma sak. Istället bör du definiera ett <code class=\"docutils literal notranslate\"><span class=\"pre\">undertitel</span></code>-attribut.</p>\n<p>I exemplet ovan ställer vi in Atom-flödets <code class=\"docutils literal notranslate\"><span class=\"pre\">undertitel</span></code> till RSS-flödets <code class=\"docutils literal notranslate\"><span class=\"pre\">beskrivning</span></code>, eftersom den redan är ganska kort.</p>\n</aside>\n<p>Och den medföljande 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>klassreferens för <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>Detta exempel illustrerar alla möjliga attribut och metoder för en <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:</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\"># Hardcoded 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>Ramverket på låg nivå<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>Bakom kulisserna använder RSS-ramverket på hög nivå ett ramverk på lägre nivå för att generera flödes XML. Detta ramverk finns i en enda modul: <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/django/utils/feedgenerator.py\">django/utils/feedgenerator.py</a>.</p>\n<p>Du använder detta ramverk på egen hand, för feedgenerering på lägre nivå. Du kan också skapa anpassade subklasser för flödesgeneratorer för användning med alternativet <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>klasserna <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>Modulen <a class=\"reference internal\" href=\"/sv/6.1/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> innehåller en basklass:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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>och flera underklasser:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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=\"/sv/6.1/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=\"/sv/6.1/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>Var och en av dessa tre klasser vet hur man renderar en viss typ av feed som XML. De delar detta gränssnitt:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/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>Initiera flödet med den angivna ordlistan med metadata, som gäller för hela flödet. Obligatoriska nyckelordsargument är:</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\">länk</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Beskrivning</span></code></p></li>\n</ul>\n<p>Det finns också en massa andra valfria nyckelord:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">språk</span></code></p></li>\n<li><p>författarens e-postadress</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">författarens_namn</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">författare_länk</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">undertitel</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kategorier</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>Eventuella extra nyckelordsargument som du skickar till <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> kommer att lagras i <code class=\"docutils literal notranslate\"><span class=\"pre\">self.feed</span></code> för användning med <a class=\"reference internal\" href=\"#custom-feed-generators\">custom feed generators</a>.</p>\n<p>Alla parametrar ska vara strängar, utom två:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code> ska vara en sekvens av strängar.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code> ska vara en sekvens av antingen strängar eller <a class=\"reference internal\" href=\"/sv/6.1/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>-instanser.</p></li>\n</ul>\n<p>Tänk på att vissa kontrolltecken inte är tillåtna &lt;<a class=\"reference external\" href=\"https://www.w3.org/International/questions/qa-controls\">https://www.w3.org/International/questions/qa-controls</a>&gt;`_ i XML-dokument. Om ditt innehåll har några av dem kan du stöta på ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> när du producerar flödet.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/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>Lägg till ett objekt i flödet med de angivna parametrarna.</p>\n<p>Obligatoriska nyckelordsargument är:</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\">länk</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Beskrivning</span></code></p></li>\n</ul>\n<p>Valfria nyckelordsargument är:</p>\n<ul class=\"simple\">\n<li><p>författarens e-postadress</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">författarens_namn</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">författare_länk</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">publiceringsdatum</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kommentarer</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">unique_id</span></code></p></li>\n<li><p>”Inneslutningar</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kategorier</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">objekt_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\">uppdaterad</span> <span class=\"pre\">uppdatering</span></code></p></li>\n</ul>\n<p>Extra nyckelordsargument kommer att lagras för <a class=\"reference internal\" href=\"#custom-feed-generators\">anpassade fodergeneratorer</a>.</p>\n<p>Alla parametrar, om de anges, ska vara strängar, utom:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pubdate</span></code> bör vara ett Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>-objekt.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">updateddate</span></code> bör vara ett Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>-objekt.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">enclosures</span></code> ska vara en lista med <a class=\"reference internal\" href=\"/sv/6.1/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>-instanser.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">categories</span></code> ska vara en sekvens av strängar.</p></li>\n</ul>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/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>Matar ut flödet i den angivna kodningen till outfile, som är ett filliknande objekt.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/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>Returnerar matningen som en sträng i den angivna kodningen.</p>\n</dd>\n</dl>\n<p>Till exempel:, för att skapa en Atom 1.0-feed och skriva ut den till standardutmatningen:</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>Anpassade fodergeneratorer<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>Om du behöver producera ett anpassat feedformat har du ett par alternativ.</p>\n<p>Om flödesformatet är helt anpassat vill du subklassa <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></code> och helt ersätta metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">writeString()</span></code>.</p>\n<p>Men om flödesformatet är en spin-off av RSS eller Atom (dvs. <a class=\"reference external\" href=\"https://georss.org\">GeoRSS</a>, Apples <a class=\"reference external\" href=\"https://help.apple.com/itc/podcasts_connect/#/itcb54353390\">iTunes podcastformat</a>, etc.), har du ett bättre val. Dessa typer av feeds lägger vanligtvis till extra element och/eller attribut till det underliggande formatet, och det finns en uppsättning metoder som <code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed</span></code> anropar för att få dessa extra attribut. Således kan du underordna den lämpliga feedgeneratorklassen (<code class=\"docutils literal notranslate\"><span class=\"pre\">Atom1Feed</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">Rss201rev2Feed</span></code>) och utöka dessa återuppringningar. De är följande:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">SyndicationFeed.root_attributes(self)</span></code></dt><dd><p>Returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> av attribut att lägga till i rotfeed-elementet (<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 för att lägga till element inuti rotfeed-elementet (<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> är en <a class=\"reference external\" href=\"https://docs.python.org/3/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">XMLGenerator</span></code></a> från Pythons inbyggda SAX-bibliotek; du kommer att anropa metoder på den för att lägga till XML-dokumentet i processen.</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>Returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> med attribut som ska läggas till i varje item (<code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>)-element. Argumentet, <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>, är en ordbok med alla data som skickas till <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 för att lägga till element till varje objekt (<code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code>/entry`) element. <code class=\"docutils literal notranslate\"><span class=\"pre\">handler</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code> är som ovan.</p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Om du åsidosätter någon av dessa metoder ska du se till att anropa metoderna i superklassen eftersom de lägger till de element som krävs för varje feedformat.</p>\n</aside>\n<p>Du kan till exempel börja implementera en iTunes RSS-flödesgenerator så här:</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>Det finns mycket mer arbete att göra för en komplett anpassad foderklass, men ovanstående exempel bör visa den grundläggande idén.</p>\n</section>\n<section id=\"feed-stylesheets\">\n<span id=\"id1\"></span><h3>Mata in formatmallar<a class=\"heading-anchor\" href=\"#feed-stylesheets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill att ditt RSS-flöde ska visas snyggt i en webbläsare måste du tillhandahålla stylinginformation för XML-filen, vanligtvis i <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/XSLT/Transforming_XML_with_XSLT\">XSLT</a>- eller CSS-format.</p>\n<p>Du kan lägga till detta i ditt RSS-flöde genom att ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">stylesheets</span></code> på feed-klassen.</p>\n<p>Detta kan vara en hårdkodad 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>Du kan också använda Djangos system för statiska filer:</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>Ett annat alternativ är att ha en vy i ditt projekt som renderar XSLT-dokumentet. Du kan sedan länka den så här:</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 kommer normalt att försöka gissa MIME-typen för den angivna URL:en baserat på dess tillägg, men om det misslyckas kan du ange den med hjälp av <a class=\"reference internal\" href=\"/sv/6.1/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>På samma sätt, om du vill använda ett annat <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code>-attribut än <code class=\"docutils literal notranslate\"><span class=\"pre\">screen</span></code> (Djangos standard), kan du använda klassen <a class=\"reference internal\" href=\"/sv/6.1/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> igen:</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>Alla dessa alternativ kan kombineras när du använder flera formatmallar:</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":"Ramverket på hög nivå","anchor":"the-high-level-framework","children":[{"title":"Översikt","anchor":"overview","children":[]},{"title":"klasserna Feed","anchor":"feed-classes","children":[]},{"title":"Ett enkelt exempel","anchor":"a-simple-example","children":[]},{"title":"Ett komplext exempel","anchor":"a-complex-example","children":[]},{"title":"Ange typ av foder","anchor":"specifying-the-type-of-feed","children":[]},{"title":"Inneslutningar","anchor":"enclosures","children":[]},{"title":"Språk","anchor":"language","children":[]},{"title":"URL:er","anchor":"urls","children":[]},{"title":"Publicera Atom- och RSS-flöden parallellt","anchor":"publishing-atom-and-rss-feeds-in-tandem","children":[]},{"title":"klassreferens för Feed","anchor":"feed-class-reference","children":[]}]},{"title":"Ramverket på låg nivå","anchor":"the-low-level-framework","children":[{"title":"klasserna SyndicationFeed","anchor":"syndicationfeed-classes","children":[]},{"title":"Anpassade fodergeneratorer","anchor":"custom-feed-generators","children":[]},{"title":"Mata in formatmallar","anchor":"feed-stylesheets","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.1/ref/"},{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/6.1/ref/contrib/"}],"prev":{"docname":"ref/contrib/staticfiles","title":"Appen ”statiska filer","url":"/sv/6.1/ref/contrib/staticfiles/"},"next":{"docname":"ref/csp","title":"Content Security Policy","url":"/sv/6.1/ref/csp/"},"formats":{"html":"/sv/6.1/ref/contrib/syndication/","markdown":"/sv/6.1/ref/contrib/syndication.md","json":"/sv/6.1/ref/contrib/syndication.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/contrib/syndication.txt","official":"https://docs.djangoproject.com/sv/6.1/ref/contrib/syndication/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}