{"title":"Djangos mallspråk","version":"6.1","locale":"sv","docname":"ref/templates/language","url":"/sv/6.1/ref/templates/language/","canonical":"https://djangodocs.dev/sv/6.1/ref/templates/language/","summary":"Detta dokument förklarar språksyntaxen i Djangos mallsystem. Om du letar efter ett mer tekniskt perspektiv på hur det fungerar och hur du kan utöka det, se Djangos…","html":"<h1>Djangos mallspråk<a class=\"heading-anchor\" href=\"#the-django-template-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument förklarar språksyntaxen i Djangos mallsystem. Om du letar efter ett mer tekniskt perspektiv på hur det fungerar och hur du kan utöka det, se <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/api/\"><span class=\"doc\">Djangos mallspråk: för Python-programmerare</span></a>.</p>\n<p>Djangos mallspråk är utformat för att hitta en balans mellan kraft och enkelhet. Det är utformat för att kännas bekvämt för dem som är vana vid att arbeta med HTML. Om du har någon erfarenhet av andra textbaserade mallspråk, som <a class=\"reference external\" href=\"https://www.smarty.net/\">Smarty</a> eller <a class=\"reference external\" href=\"https://palletsprojects.com/p/jinja/\">Jinja2</a>, kommer du att känna dig som hemma med Djangos mallar.</p>\n<aside class=\"admonition-philosophy admonition\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Om du har en bakgrund inom programmering, eller om du är van vid språk som blandar programmeringskod direkt i HTML, bör du komma ihåg att Djangos mallsystem inte bara är Python inbäddat i HTML. Detta är av design: mallsystemet är avsett att uttrycka presentation, inte programlogik.</p>\n<p>Djangos mallsystem tillhandahåller taggar som fungerar på samma sätt som vissa programmeringskonstruktioner - en <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a>-tagg för booleska tester, en <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-for\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">for</span></code></a>-tagg för loopning, etc. – men dessa exekveras inte helt enkelt som motsvarande Python-kod, och mallsystemet kommer inte att exekvera godtyckliga Python-uttryck. Endast de taggar, filter och syntax som listas nedan stöds som standard (även om du kan lägga till <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-template-tags/\"><span class=\"doc\">your own extensions</span></a> till mallspråket efter behov).</p>\n</aside>\n<section id=\"templates\">\n<h2>Mallar<a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>En mall är en textfil. Den kan generera vilket textbaserat format som helst (HTML, XML, CSV, etc.).</p>\n<p>En mall innehåller <strong>variabler</strong>, som ersätts med värden när mallen utvärderas, och <strong>taggar</strong>, som styr logiken i mallen.</p>\n<p>Nedan visas en minimal mall som illustrerar några grundläggande principer. Varje element kommer att förklaras senare i detta dokument.</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=\"k\">extends</span> <span class=\"s2\">&quot;base_generic.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">section.title</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">section.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">story</span> <span class=\"k\">in</span> <span class=\"nv\">story_list</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">story.get_absolute_url</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">story.headline</span><span class=\"o\">|</span><span class=\"nf\">upper</span> <span class=\"cp\">}}</span>\n  <span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">story.tease</span><span class=\"o\">|</span><span class=\"nf\">truncatewords</span><span class=\"s2\">:&quot;100&quot;</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition-philosophy admonition\">\n<p class=\"admonition-title\">Filosofi</p>\n<p>Varför använda en textbaserad mall istället för en XML-baserad (som Zope’s TAL)? Vi ville att Djangos mallspråk skulle vara användbart för mer än bara XML/HTML-mallar. Du kan använda mallspråket för vilket textbaserat format som helst, t.ex. e-post, JavaScript och CSV.</p>\n</aside>\n</section>\n<section id=\"variables\">\n<span id=\"template-variables\"></span><h2>Variabler<a class=\"heading-anchor\" href=\"#variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Variabler ser ut på följande sätt: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{variabel</span> <span class=\"pre\">}}</span></code>. När mallmotorn stöter på en variabel utvärderar den variabeln och ersätter den med resultatet. Variabelnamn består av en kombination av alfanumeriska tecken och understreck (<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;_&quot;</span></code>), men får inte börja med ett understreck eller vara ett tal. Punkten (<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;.&quot;</span></code>) förekommer också i variabelavsnitt, men den har en speciell betydelse som beskrivs nedan. Det är viktigt att <em>du inte kan ha mellanslag eller skiljetecken i variabelnamn.</em></p>\n<p>Använd en punkt (<code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code>) för att komma åt attribut för en variabel.</p>\n<aside class=\"admonition-behind-the-scenes admonition\">\n<p class=\"admonition-title\">Bakom kulisserna</p>\n<p>Tekniskt sett, när mallsystemet stöter på en punkt, försöker det med följande uppslagningar, i denna ordning:</p>\n<ul class=\"simple\">\n<li><p>Uppslagning i ordbok</p></li>\n<li><p>Attribut- eller metoduppslagning</p></li>\n<li><p>Uppslagning av numeriskt index</p></li>\n</ul>\n<p>Om det resulterande värdet är anropsbart anropas det utan argument. Resultatet av anropet blir mallvärdet.</p>\n<p>Denna uppslagningsordning kan orsaka oväntat beteende med objekt som åsidosätter ordboksuppslagning. Tänk till exempel på följande kodavsnitt som försöker loopa över en <code class=\"docutils literal notranslate\"><span class=\"pre\">collections.defaultdict</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">k</span><span class=\"o\">,</span> <span class=\"nv\">v</span> <span class=\"k\">in</span> <span class=\"nv\">defaultdict.items</span> <span class=\"cp\">%}</span>\n    Do something with k and v here...\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Eftersom ordboksuppslagningen sker först, slår detta beteende till och ger ett standardvärde i stället för att använda den avsedda metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">.items()</span></code>. I det här fallet bör du överväga att konvertera till en ordbok först.</p>\n</aside>\n<p>I exemplet ovan kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">section.title</span> <span class=\"pre\">}}</span></code> att ersättas med attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> för objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">section</span></code>.</p>\n<p>Om du använder en variabel som inte finns kommer mallsystemet att infoga värdet för alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">string_if_invalid</span></code>, som är inställt på <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> (den tomma strängen) som standard.</p>\n<p>Observera att ”bar” i ett malluttryck som <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">foo.bar</span> <span class=\"pre\">}}</span></code> kommer att tolkas som en bokstavlig sträng och inte som värdet på variabeln ”bar”, om en sådan finns i mallkontexten.</p>\n<p>Variabelattribut som börjar med en understrykning kan inte nås eftersom de i allmänhet anses vara privata.</p>\n</section>\n<section id=\"filters\">\n<h2>Filter<a class=\"heading-anchor\" href=\"#filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Du kan ändra variabler som ska visas med hjälp av <strong>filter</strong>.</p>\n<p>Filter ser ut så här: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{namn|lower</span> <span class=\"pre\">}}</span></code>. Här visas värdet för variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">{{namn</span> <span class=\"pre\">}}</span></code> efter att ha filtrerats genom filtret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-lower\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">lower</span></code></a>, som omvandlar text till gemener. Använd ett rör (<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>) för att tillämpa ett filter.</p>\n<p>Filter kan ”kedjas” Resultatet från ett filter tillämpas på nästa. <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">text|escape|linebreaks</span> <span class=\"pre\">}}</span></code> är ett vanligt idiom för att escapa textinnehåll och sedan konvertera radbrytningar till <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code> taggar.</p>\n<p>Vissa filter tar emot argument. Ett filterargument ser ut så här: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">bio|truncatewords:30</span> <span class=\"pre\">}}</span></code>. Detta visar de 30 första orden i variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">bio</span></code>.</p>\n<p>Filterargument som innehåller mellanslag måste citeras; om du t.ex. vill sammanfoga en lista med kommatecken och mellanslag använder du <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">list|join:&quot;,</span> <span class=\"pre\">&quot;</span> <span class=\"pre\">}}</span></code>.</p>\n<p>Django tillhandahåller ett sextiotal inbyggda mallfilter. Du kan läsa allt om dem i <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#ref-templates-builtins-filters\"><span class=\"std std-ref\">inbyggd filterreferens</span></a>. För att ge dig en försmak av vad som finns tillgängligt, här är några av de vanligaste mallfiltren:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-default\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">default</span></code></a></dt><dd><p>Om en variabel är falsk eller tom, använd angiven standard. I annat fall används variabelns värde. Till exempel:</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\">value</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;nothing&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> inte anges eller är tomt, kommer ovanstående att visa ”<code class=\"docutils literal notranslate\"><span class=\"pre\">nothing</span></code>”.</p>\n</dd>\n<dt><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">längd</span></code></dt><dd><p>Returnerar längden på värdet. Detta fungerar för både strängar och listor. Till exempel:</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\">value</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">värde</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">['a',</span> <span class=\"pre\">'b',</span> <span class=\"pre\">'c',</span> <span class=\"pre\">'d']</span></code>, blir utdata <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code>.</p>\n</dd>\n<dt><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">filstorleksformat</span></code></dt><dd><p>Formaterar värdet som en ”mänskligt läsbar” filstorlek (dvs. <code class=\"docutils literal notranslate\"><span class=\"pre\">'13</span> <span class=\"pre\">KB'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'4,1</span> <span class=\"pre\">MB'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'102</span> <span class=\"pre\">bytes'</span></code>, etc.). Till exempel:</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\">value</span><span class=\"o\">|</span><span class=\"nf\">filesizeformat</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">värde</span></code> är 123456789, skulle utdata vara <code class=\"docutils literal notranslate\"><span class=\"pre\">117.7</span> <span class=\"pre\">MB</span></code>.</p>\n</dd>\n</dl>\n<p>Återigen, detta är bara några exempel; se <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#ref-templates-builtins-filters\"><span class=\"std std-ref\">inbyggt filter referens</span></a> för den fullständiga listan.</p>\n<p>Du kan också skapa dina egna anpassade mallfilter, se <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-template-tags/\"><span class=\"doc\">Så här skapar du anpassade malltaggar och filter</span></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p>Djangos administratörsgränssnitt kan innehålla en fullständig referens över alla malltaggar och filter som är tillgängliga för en viss webbplats. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/admindocs/\"><span class=\"doc\">Generatorn för Django-administratörsdokumentation</span></a>.</p>\n</aside>\n</section>\n<section id=\"tags\">\n<h2>Taggar<a class=\"heading-anchor\" href=\"#tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Taggar ser ut så här: <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">tag</span> <span class=\"pre\">%}</span></code>. Taggar är mer komplexa än variabler: Vissa skapar text i utdata, andra styr flödet genom att utföra loopar eller logik, och vissa laddar in extern information i mallen för att användas av senare variabler.</p>\n<p>Vissa taggar kräver en start- och en sluttagg (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">tag</span> <span class=\"pre\">%}</span> <span class=\"pre\">...</span> <span class=\"pre\">taggens</span> <span class=\"pre\">innehåll</span> <span class=\"pre\">...</span> <span class=\"pre\">{%</span> <span class=\"pre\">endtag</span> <span class=\"pre\">%}</span></code>).</p>\n<p>Django levereras med ungefär två dussin inbyggda malltaggar. Du kan läsa allt om dem i <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#ref-templates-builtins-tags\"><span class=\"std std-ref\">built-in tag reference</span></a>. För att ge dig en försmak av vad som finns tillgängligt, här är några av de vanligaste taggarna:</p>\n<dl>\n<dt><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">för</span></code></dt><dd><p>Loop over each item in an array. For example, to display a list of athletes\nprovided in <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_list</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">athlete</span> <span class=\"k\">in</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">athlete.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code></dt><dd><p>Utvärderar en variabel, och om variabeln är ”true” visas innehållet i blocket:</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=\"k\">if</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span>\n    Number of athletes: <span class=\"cp\">{{</span> <span class=\"nv\">athlete_list</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">elif</span> <span class=\"nv\">athlete_in_locker_room_list</span> <span class=\"cp\">%}</span>\n    Athletes should be out of the locker room soon!\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    No athletes.\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>I ovanstående fall, om <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_list</span></code> inte är tom, visas antalet deltagare i variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">athlete_list|length</span> <span class=\"pre\">}}</span></code>. I annat fall, om <code class=\"docutils literal notranslate\"><span class=\"pre\">athlete_in_locker_room_list</span></code> inte är tom, visas meddelandet ”Athletes should be out…”. Om båda listorna är tomma visas meddelandet ”No athletes.”.</p>\n<p>Du kan också använda filter och olika operatorer i <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-if\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">if</span></code></a>-taggen:</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=\"k\">if</span> <span class=\"nv\">athlete_list</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"o\">&gt;</span> <span class=\"m\">1</span> <span class=\"cp\">%}</span>\n   Team: <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">athlete</span> <span class=\"k\">in</span> <span class=\"nv\">athlete_list</span> <span class=\"cp\">%}</span> ... <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n   Athlete: <span class=\"cp\">{{</span> <span class=\"nv\">athlete_list.0.name</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Även om exemplet ovan fungerar bör du vara medveten om att de flesta mallfilter returnerar strängar, så matematiska jämförelser med hjälp av filter fungerar i allmänhet inte som du förväntar dig. <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-length\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">length</span></code></a> är ett undantag.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">extends</span></code></a></dt><dd><p>Ställ in <a class=\"reference internal\" href=\"#id1\">mallarv</a> (se nedan), ett kraftfullt sätt att minska ”boilerplate” i mallar.</p>\n</dd>\n</dl>\n<p>Återigen, ovanstående är bara ett urval av hela listan; se <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#ref-templates-builtins-tags\"><span class=\"std std-ref\">built-in tag reference</span></a> för hela listan.</p>\n<p>Du kan också skapa dina egna anpassade malltaggar, se <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-template-tags/\"><span class=\"doc\">Så här skapar du anpassade malltaggar och filter</span></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p>Djangos administratörsgränssnitt kan innehålla en fullständig referens över alla malltaggar och filter som är tillgängliga för en viss webbplats. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/admindocs/\"><span class=\"doc\">Generatorn för Django-administratörsdokumentation</span></a>.</p>\n</aside>\n</section>\n<section id=\"comments\">\n<span id=\"template-comments\"></span><h2>Kommentarer<a class=\"heading-anchor\" href=\"#comments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du vill kommentera bort en del av en rad i en mall använder du kommentarsyntaxen: <code class=\"docutils literal notranslate\"><span class=\"pre\">{#</span> <span class=\"pre\">#}</span></code>.</p>\n<p>Till exempel: skulle den här mallen återges som <code class=\"docutils literal notranslate\"><span class=\"pre\">'hello'</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"c\">{# greeting #}</span>hello\n</code></pre></div>\n<p>En kommentar kan innehålla vilken mallkod som helst, oavsett om den är ogiltig eller inte. Till exempel:</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=\"c\">{# {% if foo %}bar{% else %} #}</span>\n</code></pre></div>\n<p>Denna syntax kan endast användas för kommentarer på en rad (inga nya rader tillåts mellan <code class=\"docutils literal notranslate\"><span class=\"pre\">{#</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">#}</span></code> avgränsarna). Om du behöver kommentera ut en flerradig del av mallen, se taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-comment\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">comment</span></code></a>.</p>\n</section>\n<section id=\"template-inheritance\">\n<span id=\"id1\"></span><h2>Arv av mall<a class=\"heading-anchor\" href=\"#template-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Den mest kraftfulla - och därmed den mest komplexa - delen av Djangos mallmotor är mallarv. Med mallarv kan du bygga en grundläggande ”skelettmall” som innehåller alla vanliga element på din webbplats och definierar <strong>block</strong> som barnmallar kan åsidosätta.</p>\n<p>Låt oss titta på mallar som ärvs genom att börja med ett exempel:</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\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;style.css&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>My amazing site<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;sidebar&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">sidebar</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">&gt;</span>Home<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/blog/&quot;</span><span class=\"p\">&gt;</span>Blog<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;content&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Denna mall, som vi kallar <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code>, definierar ett HTML-skelettdokument som du kan använda för en sida med två kolumner. Det är ”barn”-mallarnas uppgift att fylla de tomma blocken med innehåll.</p>\n<p>I det här exemplet definierar taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> tre block som underordnade mallar kan fylla i. Allt taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a> gör är att tala om för mallmotorn att en underordnad mall kan åsidosätta dessa delar av mallen.</p>\n<p>En barnmall kan se ut så här:</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=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>My amazing blog<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">entry</span> <span class=\"k\">in</span> <span class=\"nv\">blog_entries</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">entry.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">entry.body</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">extends</span></code></a> är nyckeln här. Den talar om för mallmotorn att den här mallen ”förlänger” en annan mall. När mallsystemet utvärderar den här mallen letar det först upp den överordnade mallen - i det här fallet ”base.html”.</p>\n<p>Vid den tidpunkten kommer mallmotorn att märka de tre <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a>-taggarna i <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> och ersätta dessa block med innehållet i barnmallen. Beroende på värdet på <code class=\"docutils literal notranslate\"><span class=\"pre\">blog_entries</span></code> kan utdata se ut som:</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\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;style.css&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>My amazing blog<span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;sidebar&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">&gt;</span>Home<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/blog/&quot;</span><span class=\"p\">&gt;</span>Blog<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;content&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Entry one<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>This is my first entry.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n\n        <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Entry two<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>This is my second entry.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Observera att eftersom barnmallen inte definierade blocket <code class=\"docutils literal notranslate\"><span class=\"pre\">sidebar</span></code> används värdet från den överordnade mallen i stället. Innehåll i en <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code>-tagg i en överordnad mall används alltid som en fallback.</p>\n<p>Du kan använda så många nivåer av arv som behövs. Ett vanligt sätt att använda arv är följande tre nivåer:</p>\n<ul class=\"simple\">\n<li><p>Skapa en mall, ”base.html”, som innehåller webbplatsens huvudsakliga utseende och känsla.</p></li>\n<li><p>Skapa en mall <code class=\"docutils literal notranslate\"><span class=\"pre\">base_SECTIONNAME.html</span></code> för varje ”sektion” på din webbplats. Till exempel:, <code class=\"docutils literal notranslate\"><span class=\"pre\">base_news.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">base_sports.html</span></code>. Dessa mallar utökar alla <code class=\"docutils literal notranslate\"><span class=\"pre\">base.html</span></code> och inkluderar sektionsspecifika stilar/design.</p></li>\n<li><p>Skapa individuella mallar för varje typ av sida, t.ex. en nyhetsartikel eller ett blogginlägg. Dessa mallar utökar den lämpliga sektionsmallen.</p></li>\n</ul>\n<p>Detta tillvägagångssätt maximerar återanvändningen av kod och hjälper till att lägga till objekt i delade innehållsområden, t.ex. sektionsomfattande navigering.</p>\n<p>Här är några tips för att arbeta med arv:</p>\n<ul>\n<li><p>Om du använder <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code></a> i en mall, måste det vara den första malltaggen i den mallen. Mallarv fungerar inte annars.</p></li>\n<li><p>Fler <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code></a>-taggar i dina basmallar är bättre. Kom ihåg att barnmallar inte behöver definiera alla överordnade block, så du kan fylla i rimliga standardvärden i ett antal block och sedan bara definiera dem du behöver senare. Det är bättre att ha fler hooks än färre hooks.</p></li>\n<li><p>Om du upptäcker att du duplicerar innehåll i ett antal mallar betyder det förmodligen att du bör flytta innehållet till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code> i en överordnad mall.</p></li>\n<li><p>Om du behöver hämta innehållet i blocket från den överordnade mallen kan du använda variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">block.super</span> <span class=\"pre\">}}</span></code>. Detta är användbart om du vill lägga till innehållet i ett överordnat block i stället för att helt åsidosätta det. Data som infogas med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">block.super</span> <span class=\"pre\">}}</span></code> kommer inte att escapas automatiskt (se <a class=\"reference external\" href=\"#automatic-html-escaping\">nästa avsnitt</a>), eftersom de redan escapats, om nödvändigt, i den överordnade mallen.</p></li>\n<li><p>Genom att använda samma mallnamn som du ärver från, kan <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code></a> användas för att ärva en mall samtidigt som du åsidosätter den. Kombinerat med <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">block.super</span> <span class=\"pre\">}}</span></code> kan detta vara ett kraftfullt sätt att göra små anpassningar. Se <a class=\"reference internal\" href=\"/sv/6.1/howto/overriding-templates/#extending-an-overridden-template\"><span class=\"std std-ref\">Utöka en åsidosatt mall</span></a> i <em>Overriding templates</em> How-to för ett fullständigt exempel.</p></li>\n<li><p>Variabler som skapas utanför en <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code></a> med hjälp av malltaggen <code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> syntax kan inte användas inuti blocket. Till exempel:, den här mallen renderar ingenting:</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=\"k\">translate</span> <span class=\"s2\">&quot;Title&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">title</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n<li><p>För extra läsbarhet kan du välja att ge ett <em>namn</em> till din tagg <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">endblock</span> <span class=\"pre\">%}</span></code>. Till exempel:</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=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n...\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>I större mallar hjälper den här tekniken dig att se vilka <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code>-taggar som stängs.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">block</span> <span class=\"pre\">%}</span></code></a>-taggar utvärderas först. Det är därför som innehållet i ett block alltid åsidosätts, oavsett sanningshalten i omgivande taggar. Till exempel: kommer den här mallen <em>alltid</em> att åsidosätta innehållet i blocket <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">change_title</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>Hello!<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</li>\n</ul>\n<p>Slutligen bör du notera att du inte kan definiera flera <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a>-taggar med samma namn i samma mall. Denna begränsning finns eftersom en block-tagg fungerar i ”båda” riktningarna. Det vill säga, en block-tagg ger inte bara ett hål att fylla - den definierar också det innehåll som fyller hålet i <em>föräldern</em>. Om det fanns två <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-block\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">block</span></code></a>-taggar med liknande namn i en mall, skulle mallens förälder inte veta vilket av blockens innehåll som skulle användas.</p>\n</section>\n<section id=\"template-partials\">\n<span id=\"id2\"></span><h2>Template partials<a class=\"heading-anchor\" href=\"#template-partials\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"6.0\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p>Template partials define reusable template fragments within a template file.\nThey are self-contained components that can be rendered multiple times within\nthe same template, helping to avoid repetition and maintain consistent output.</p>\n<section id=\"basic-syntax\">\n<h3>Basic syntax<a class=\"heading-anchor\" href=\"#basic-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A partial can be defined using the <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-partialdef\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">partialdef</span></code></a> tag:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">authors.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">partialdef</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;user-info-</span><span class=\"cp\">{{</span> <span class=\"nv\">user.username</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">h3</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">user.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h3</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">user.bio</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endpartialdef</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>For extra readability, the name can be included in the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">endpartialdef</span> <span class=\"pre\">%}</span></code>\nclosing tag:</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=\"k\">partialdef</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n    <span class=\"c\">{# ... #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endpartialdef</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>The template fragment can be rendered using the <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-partial\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">partial</span></code></a> tag:</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=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n<section id=\"fragment-reuse\">\n<h3>Fragment reuse<a class=\"heading-anchor\" href=\"#fragment-reuse\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A template fragment can be reused multiple times:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">authors.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Authors<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">user</span> <span class=\"k\">in</span> <span class=\"nv\">authors</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Editors<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">user</span> <span class=\"k\">in</span> <span class=\"nv\">editors</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>The partial content is rendered each time the named partial is used, with the\ncurrent template context.</p>\n</section>\n<section id=\"inline-partials\">\n<span id=\"template-partials-inline\"></span><h3>Inline partials<a class=\"heading-anchor\" href=\"#inline-partials\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A template fragment can be defined and rendered in-place using the <code class=\"docutils literal notranslate\"><span class=\"pre\">inline</span></code>\nargument. This defines the partial for later reuse while also rendering it\nimmediately at its definition:</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=\"c\">{# Define and render immediately. #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">partialdef</span> <span class=\"nv\">user-info</span> <span class=\"nv\">inline</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;user-info-</span><span class=\"cp\">{{</span> <span class=\"nv\">user.username</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">h3</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">user.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h3</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">user.bio</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endpartialdef</span> <span class=\"cp\">%}</span>\n\n<span class=\"c\">{# Other page content here. #}</span>\n\n<span class=\"c\">{# Reuse later elsewhere in the template. #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">section</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;featured-authors&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Featured Authors<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">user</span> <span class=\"k\">in</span> <span class=\"nv\">featured</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">section</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"accessing-partials-directly\">\n<span id=\"template-partials-direct-access\"></span><h3>Accessing partials directly<a class=\"heading-anchor\" href=\"#accessing-partials-directly\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Template fragments defined with <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-partialdef\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">partialdef</span></code></a> can be accessed directly via\ntemplate loading or inclusion using the <code class=\"docutils literal notranslate\"><span class=\"pre\">template.html#partial_name</span></code> syntax.</p>\n<p>For example, using the <a class=\"reference internal\" href=\"/sv/6.1/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">render()</span></code></a> shortcut, the following\ncode renders only the partial named <code class=\"docutils literal notranslate\"><span class=\"pre\">user-info</span></code> defined in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">authors.html</span></code> template:</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.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">user_info_partial</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user_id</span><span class=\"p\">):</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">user_id</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;authors.html#user-info&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;user&quot;</span><span class=\"p\">:</span> <span class=\"n\">user</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>This approach is particularly useful for AJAX-style requests that update only\nspecific portions of a page with the rendered template fragment.</p>\n<p>Template partials can also be included using the <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</span></code></a> template tag\nwith the same <code class=\"docutils literal notranslate\"><span class=\"pre\">#</span></code> directive:</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=\"k\">include</span> <span class=\"s2\">&quot;authors.html#user-info&quot;</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n<section id=\"context-handling\">\n<h3>Context handling<a class=\"heading-anchor\" href=\"#context-handling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Template partials are rendered with the current template context. They work as\nexpected in loops and with context variables:</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=\"k\">for</span> <span class=\"nv\">user</span> <span class=\"k\">in</span> <span class=\"nv\">users</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Context variables can be adjusted using the <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-with\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">with</span></code></a> tag:</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=\"k\">with</span> <span class=\"nv\">user</span><span class=\"o\">=</span><span class=\"nv\">featured_author</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>Featured Author of the Month<span class=\"p\">&lt;/</span><span class=\"nt\">h2</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">partial</span> <span class=\"nv\">user-info</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endwith</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"automatic-html-escaping\">\n<span id=\"id3\"></span><h2>Automatisk HTML-escaping<a class=\"heading-anchor\" href=\"#automatic-html-escaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När HTML genereras från mallar finns det alltid en risk att en variabel innehåller tecken som påverkar den resulterande HTML:en. Tänk till exempel på detta mallfragment:</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>Hello, <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Till en början verkar detta vara ett harmlöst sätt att visa en användares namn, men tänk på vad som skulle hända om användaren skrev in sitt namn så här:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span><span class=\"nx\">alert</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">)&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Med detta namnvärde skulle mallen återges som:</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>Hello, <span class=\"p\">&lt;</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span><span class=\"nx\">alert</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">)&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>…vilket innebär att webbläsaren skulle visa en JavaScript-varningsruta!</p>\n<p>Och om namnet innehåller symbolen <code class=\"docutils literal notranslate\"><span class=\"pre\">'&lt;'</span></code>, så här?</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</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=\"Html code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>username\n</code></pre></div>\n<p>Det skulle resultera i en renderad mall som denna:</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>Hello, <span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>username\n</code></pre></div>\n<p>…vilket i sin tur skulle leda till att resten av webbsidan skulle vara i fetstil!</p>\n<p>Det är uppenbart att man inte ska lita blint på data som skickas in av användare och infoga dem direkt i webbsidorna, eftersom en illvillig användare kan använda den här typen av hål för att göra potentiellt dåliga saker. Den här typen av säkerhetsbrist kallas för en XSS-attack (Cross Site Scripting).</p>\n<p>För att undvika detta problem har du två alternativ:</p>\n<ul class=\"simple\">\n<li><p>Ett, du kan se till att köra varje opålitlig variabel genom <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a>-filtret (dokumenterat nedan), som konverterar potentiellt skadliga HTML-tecken till oskadliga. Detta var standardlösningen i Django under de första åren, men problemet är att det lägger ansvaret på * dig*, utvecklaren / mallförfattaren, att se till att du escapar allt. Det är lätt att glömma att undkomma data.</p></li>\n<li><p>För det andra kan du dra nytta av Djangos automatiska HTML-escaping. Resten av detta avsnitt beskriver hur automatisk eskapning fungerar.</p></li>\n</ul>\n<p>Som standard i Django escapar varje mall automatiskt utdata från varje variabel tagg. Specifikt är dessa fem tecken escapade:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> konverteras till <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;lt;</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> konverteras till <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;gt;</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> (enkelt citattecken) konverteras till <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;#x27;</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;</span></code> (dubbelcitat) konverteras till <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;quot;</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code> konverteras till <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;amp;</span></code></p></li>\n</ul>\n<p>Återigen betonar vi att detta beteende är aktiverat som standard. Om du använder Djangos mallsystem är du skyddad.</p>\n<section id=\"how-to-turn-it-off\">\n<h3>Så här stänger du av den<a class=\"heading-anchor\" href=\"#how-to-turn-it-off\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du inte vill att data ska förslutas automatiskt, per webbplats, per mall eller per variabel, kan du stänga av det på flera olika sätt.</p>\n<p>Varför skulle du vilja stänga av det? För att mallvariabler ibland innehåller data som du <em>menar</em> ska återges som rå HTML, och då vill du inte att deras innehåll ska escapas. Du kanske till exempel lagrar en HTML-blobb i din databas och vill bädda in den direkt i din mall. Eller så kanske du använder Djangos mallsystem för att producera text som <em>inte</em> är HTML - som ett e-postmeddelande, till exempel.</p>\n<section id=\"for-individual-variables\">\n<h4>För enskilda variabler<a class=\"heading-anchor\" href=\"#for-individual-variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du vill inaktivera automatisk eskapning för en enskild variabel använder du filtret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">safe</span></code></a>:</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>This will be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>\nThis will not be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Tänk på <em>safe</em> som en förkortning för <em>safe from further escaping</em> eller <em>can be safely interpreted as HTML</em>. I detta exempel, om <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">'&lt;b&gt;'</span></code>, kommer utdata att vara:</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>This will be escaped: <span class=\"ni\">&amp;lt;</span>b<span class=\"ni\">&amp;gt;</span>\nThis will not be escaped: <span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"for-template-blocks\">\n<h4>För mallblock<a class=\"heading-anchor\" href=\"#for-template-blocks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att styra automatisk avstavning för en mall, linda in mallen (eller en viss del av mallen) i <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">autoescape</span></code></a> taggen, så här:</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=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n    Hello <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">autoescape</span></code></a> tar antingen <code class=\"docutils literal notranslate\"><span class=\"pre\">on</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">off</span></code> som sitt argument. Ibland kanske du vill tvinga fram automatisk eskapning när den annars skulle vara inaktiverad. Här är ett exempel på en mall:</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>Auto-escaping is on by default. Hello <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n    This will not be auto-escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>.\n\n    Nor this: <span class=\"cp\">{{</span> <span class=\"nv\">other_data</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">on</span> <span class=\"cp\">%}</span>\n        Auto-escaping applies again: <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Auto-escaping-taggen överför sin effekt till mallar som utökar den aktuella samt mallar som inkluderas via taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</span></code></a>, precis som alla blocktaggar. Till exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">bas.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">child.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>This <span class=\"ni\">&amp;amp;</span> that<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">greeting</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>Eftersom auto-escaping är avstängt i basmallen kommer det också att vara avstängt i underordnad mall, vilket resulterar i följande renderade HTML när variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting</span></code> innehåller strängen <code class=\"docutils literal notranslate\"><span class=\"pre\">Hello&lt;b&gt;!&lt;/b&gt;</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>This <span class=\"ni\">&amp;amp;</span> that<span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>Hello!<span class=\"p\">&lt;/</span><span class=\"nt\">b</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"notes\">\n<h3>Anteckningar<a class=\"heading-anchor\" href=\"#notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Generellt sett behöver mallförfattare inte oroa sig för automatisk escaping särskilt mycket. Utvecklare på Python-sidan (personer som skriver vyer och anpassade filter) måste tänka på de fall där data inte ska escapas och markera data på lämpligt sätt, så att saker och ting bara fungerar i mallen.</p>\n<p>Om du skapar en mall som kan användas i situationer där du inte är säker på om automatisk eskapning är aktiverad, lägg då till ett <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a>-filter till alla variabler som behöver eskapas. När automatisk eskapning är aktiverad finns det ingen risk för att filtret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> <em>dubbel-eskapar</em> data - filtret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-escape\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">escape</span></code></a> påverkar inte variabler med automatisk eskapning.</p>\n</section>\n<section id=\"string-literals-and-automatic-escaping\">\n<span id=\"id4\"></span><h3>Stränglitteraler och automatisk escaping<a class=\"heading-anchor\" href=\"#string-literals-and-automatic-escaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som vi nämnde tidigare kan filterargument vara strängar:</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\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;This is a string literal.&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Alla stränglitteraler infogas <strong>utan</strong> någon automatisk escaping i mallen - de fungerar som om de alla hade passerat genom filtret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">safe</span></code></a>. Anledningen till detta är att mallförfattaren har kontroll över vad som läggs in i stränglitalen, så att de kan se till att texten är korrekt escapad när mallen skrivs.</p>\n<p>Detta innebär att du skulle skriva :</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\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;3 &amp;lt; 2&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>…snarare än:</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\">data</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;3 &lt; 2&quot;</span> <span class=\"cp\">}}</span>  <span class=\"c\">{# Bad! Don&#39;t do this. #}</span>\n</code></pre></div>\n<p>Detta påverkar inte vad som händer med data som kommer från själva variabeln. Variabelns innehåll escapas fortfarande automatiskt, om det behövs, eftersom det ligger utanför mallförfattarens kontroll.</p>\n</section>\n</section>\n<section id=\"accessing-method-calls\">\n<span id=\"template-accessing-methods\"></span><h2>Tillgång till metodanrop<a class=\"heading-anchor\" href=\"#accessing-method-calls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>De flesta metodanrop som är kopplade till objekt är också tillgängliga från mallar. Detta innebär att mallar har tillgång till mycket mer än bara klassattribut (som fältnamn) och variabler som skickas in från vyer. Till exempel: tillhandahåller Django ORM <a class=\"reference internal\" href=\"/sv/6.1/topics/db/queries/#topics-db-queries-related\"><span class=\"std std-ref\">”entry_set”</span></a> syntax för att hitta en samling objekt som är relaterade till en främmande nyckel. Därför kan du, med en modell som heter ”comment” med en främmande nyckelrelation till en modell som heter ”task”, slingra dig genom alla kommentarer som är kopplade till en viss uppgift så här:</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=\"k\">for</span> <span class=\"nv\">comment</span> <span class=\"k\">in</span> <span class=\"nv\">task.comment_set.all</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">comment</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>På samma sätt tillhandahåller <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/\"><span class=\"doc\">QuerySets</span></a> en <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code>-metod för att räkna antalet objekt som de innehåller. Därför kan du få en räkning av alla kommentarer som är relaterade till den aktuella uppgiften med:</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\">task.comment_set.all.count</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Du kan också få tillgång till metoder som du uttryckligen har definierat i dina egna modeller:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">modeller.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Task</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">foo</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;bar&quot;</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mall.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">task.foo</span> <span class=\"cp\">}}</span>\n</code></pre></figure>\n<p>Eftersom Django avsiktligt begränsar mängden logisk bearbetning som är tillgänglig i mallspråket är det inte möjligt att skicka argument till metodanrop som nås från mallar. Data bör beräknas i vyer och sedan skickas till mallar för visning.</p>\n</section>\n<section id=\"custom-tag-and-filter-libraries\">\n<span id=\"loading-custom-template-libraries\"></span><h2>Anpassade tagg- och filterbibliotek<a class=\"heading-anchor\" href=\"#custom-tag-and-filter-libraries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vissa applikationer tillhandahåller anpassade tagg- och filterbibliotek. För att komma åt dem i en mall, se till att applikationen finns i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> (vi lägger till <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.humanize'</span></code> i det här exemplet), och använd sedan <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a>-taggen i en mall:</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=\"k\">load</span> <span class=\"nv\">humanize</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"m\">45000</span><span class=\"o\">|</span><span class=\"nf\">intcomma</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>I ovanstående laddar <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a> taggen taggbiblioteket <code class=\"docutils literal notranslate\"><span class=\"pre\">humanize</span></code>, som sedan gör filtret <code class=\"docutils literal notranslate\"><span class=\"pre\">intcomma</span></code> tillgängligt för användning. Om du har aktiverat <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/admin/admindocs/#module-django.contrib.admindocs\" title=\"django.contrib.admindocs: Django's admin documentation generator.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admindocs</span></code></a> kan du läsa dokumentationsområdet i din admin för att hitta listan över anpassade bibliotek i din installation.</p>\n<p>Taggen <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">load</span></code></a> kan innehålla flera biblioteksnamn, åtskilda med mellanslag. Exempel på 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=\"k\">load</span> <span class=\"nv\">humanize</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-template-tags/\"><span class=\"doc\">Så här skapar du anpassade malltaggar och filter</span></a> för information om hur du skriver dina egna anpassade mallbibliotek.</p>\n<section id=\"custom-libraries-and-template-inheritance\">\n<h3>Anpassade bibliotek och arv av mallar<a class=\"heading-anchor\" href=\"#custom-libraries-and-template-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du laddar ett anpassat tagg- eller filterbibliotek görs taggarna/filtren endast tillgängliga för den aktuella mallen - inte för eventuella överordnade eller underordnade mallar längs mallens arvsstig.</p>\n<p>Om t.ex. en mall <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.html</span></code> har <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">humanize</span> <span class=\"pre\">%}</span></code>, kommer en underordnad mall (t.ex. en som har <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">&quot;foo.html&quot;</span> <span class=\"pre\">%}</span></code>) <em>inte</em> att ha tillgång till humanize-mallens taggar och filter. Den underordnade mallen är ansvarig för sin egen <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">humanize</span> <span class=\"pre\">%}</span></code>.</p>\n<p>Detta är en funktion för underhållbarhetens och sanitetens skull.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/templates/\"><span class=\"doc\">Mallreferensen</span></a></dt><dd><p>Omfattar inbyggda taggar, inbyggda filter, användning av ett alternativt mallspråk och mycket mer.</p>\n</dd>\n</dl>\n</aside>\n</section>\n</section>","rootId":"the-django-template-language","toc":[{"title":"Mallar","anchor":"templates","children":[]},{"title":"Variabler","anchor":"variables","children":[]},{"title":"Filter","anchor":"filters","children":[]},{"title":"Taggar","anchor":"tags","children":[]},{"title":"Kommentarer","anchor":"comments","children":[]},{"title":"Arv av mall","anchor":"template-inheritance","children":[]},{"title":"Template partials","anchor":"template-partials","children":[{"title":"Basic syntax","anchor":"basic-syntax","children":[]},{"title":"Fragment reuse","anchor":"fragment-reuse","children":[]},{"title":"Inline partials","anchor":"inline-partials","children":[]},{"title":"Accessing partials directly","anchor":"accessing-partials-directly","children":[]},{"title":"Context handling","anchor":"context-handling","children":[]}]},{"title":"Automatisk HTML-escaping","anchor":"automatic-html-escaping","children":[{"title":"Så här stänger du av den","anchor":"how-to-turn-it-off","children":[{"title":"För enskilda variabler","anchor":"for-individual-variables","children":[]},{"title":"För mallblock","anchor":"for-template-blocks","children":[]}]},{"title":"Anteckningar","anchor":"notes","children":[]},{"title":"Stränglitteraler och automatisk escaping","anchor":"string-literals-and-automatic-escaping","children":[]}]},{"title":"Tillgång till metodanrop","anchor":"accessing-method-calls","children":[]},{"title":"Anpassade tagg- och filterbibliotek","anchor":"custom-tag-and-filter-libraries","children":[{"title":"Anpassade bibliotek och arv av mallar","anchor":"custom-libraries-and-template-inheritance","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.1/ref/"},{"docname":"ref/templates/index","title":"Mallar","url":"/sv/6.1/ref/templates/"}],"prev":{"docname":"ref/templates/index","title":"Mallar","url":"/sv/6.1/ref/templates/"},"next":{"docname":"ref/templates/builtins","title":"Inbyggda malltaggar och filter","url":"/sv/6.1/ref/templates/builtins/"},"formats":{"html":"/sv/6.1/ref/templates/language/","markdown":"/sv/6.1/ref/templates/language.md","json":"/sv/6.1/ref/templates/language.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/templates/language.txt","official":"https://docs.djangoproject.com/sv/6.1/ref/templates/language/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}