{"title":"Djangos mallspråk: för Python-programmerare","version":"5.2","locale":"sv","docname":"ref/templates/api","url":"/sv/5.2/ref/templates/api/","canonical":"https://djangodocs.dev/sv/5.2/ref/templates/api/","summary":"Detta dokument förklarar Djangos mallsystem ur ett tekniskt perspektiv - hur det fungerar och hur man utökar det.","html":"<h1>Djangos mallspråk: för Python-programmerare<a class=\"heading-anchor\" href=\"#the-django-template-language-for-python-programmers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument förklarar Djangos mallsystem ur ett tekniskt perspektiv - hur det fungerar och hur man utökar det. Om du letar efter en referens om språkets syntax, se <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/language/\"><span class=\"doc\">Djangos mallspråk</span></a>.</p>\n<p>Det förutsätter en förståelse för mallar, kontexter, variabler, taggar och rendering. Börja med <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#template-language-intro\"><span class=\"std std-ref\">introduktion till Djangos mallspråk</span></a> om du inte är bekant med dessa begrepp.</p>\n<section id=\"overview\">\n<h2>Översikt<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Att använda mallsystemet i Python är en process i tre steg:</p>\n<ol class=\"arabic simple\">\n<li><p>Du konfigurerar en <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a>.</p></li>\n<li><p>Du sammanställer mallkod till en <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>.</p></li>\n<li><p>Du renderar mallen med en <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a>.</p></li>\n</ol>\n<p>Djangoprojekt förlitar sig i allmänhet på :ref: hög nivå, backend agnostiska API:er &lt;template-engines&gt; för vart och ett av dessa steg istället för mallsystemets API:er på lägre nivå:</p>\n<ol class=\"arabic simple\">\n<li><p>För varje <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> backend i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> inställningen, instansierar Django en <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a>. <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> omsluter <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> och anpassar den till det gemensamma mall backend API.</p></li>\n<li><p>Modulen <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#module-django.template.loader\" title=\"django.template.loader\"><code class=\"xref py py-mod docutils literal notranslate\">django.template.loader</code></a> tillhandahåller funktioner som <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> för att ladda mallar. De returnerar en <code class=\"docutils literal notranslate\">django.template.backends.django.Template</code> som omsluter den faktiska <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">django.template.Template</code></a>.</p></li>\n<li><p>Den <code class=\"docutils literal notranslate\">Template</code> som erhölls i föregående steg har en <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.base.Template.render\" title=\"django.template.backends.base.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\">render()</code></a>-metod som samlar en kontext och eventuellt en begäran i en <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> och delegerar renderingen till den underliggande <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>.</p></li>\n</ol>\n</section>\n<section id=\"configuring-an-engine\">\n<h2>Konfigurera en motor<a class=\"heading-anchor\" href=\"#configuring-an-engine\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du använder <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> backend, är detta förmodligen inte den dokumentation du letar efter. En instans av klassen <code class=\"docutils literal notranslate\">Engine</code> som beskrivs nedan är tillgänglig med hjälp av attributet <code class=\"docutils literal notranslate\">engine</code> för den backend och alla attributstandarder som nämns nedan åsidosätts av det som skickas av <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Engine</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">dirs<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">app_dirs<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">context_processors<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">debug<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">loaders<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">string_if_invalid<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">file_charset<span class=\"o\">=</span><span class=\"default_value\">'utf-8'</span></em>, <em class=\"sig-param\">libraries<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">builtins<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">autoescape<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Vid instansiering av en <code class=\"docutils literal notranslate\">Engine</code> måste alla argument skickas som nyckelordsargument:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">dirs</code> är en lista över kataloger där motorn ska leta efter mallkällfiler. Den används för att konfigurera <a class=\"reference internal\" href=\"#django.template.loaders.filesystem.Loader\" title=\"django.template.loaders.filesystem.Loader\"><code class=\"xref py py-class docutils literal notranslate\">filesystem.Loader</code></a>.</p>\n<p>Standardvärdet är en tom lista.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">app_dirs</code> påverkar endast standardvärdet för <code class=\"docutils literal notranslate\">loaders</code>. Se nedan.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">False</code>.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">autoescape</code> kontrollerar om HTML autoescaping är aktiverat.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">True</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Sätt den bara till <code class=\"docutils literal notranslate\">False</code> om du renderar icke-HTML-mallar!</p>\n</aside>\n</li>\n<li><p><code class=\"docutils literal notranslate\">context_processors</code> är en lista med prickade Python-sökvägar till anropsbara filer som används för att fylla i kontexten när en mall renderas med en begäran. Dessa callables tar ett request-objekt som sitt argument och returnerar en <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">dict</code></a> av objekt som ska sammanfogas i kontexten.</p>\n<p>Standardvärdet är en tom lista.</p>\n<p>Se <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> för mer information.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">debug</code> är en boolean som aktiverar/avaktiverar mallens felsökningsläge. Om det är <code class=\"docutils literal notranslate\">True</code> kommer mallmotorn att lagra ytterligare felsökningsinformation som kan användas för att visa en detaljerad rapport för alla undantag som uppstår under mallrenderingen.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">False</code>.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">loaders</code> är en lista över mallinläsningsklasser, specificerade som strängar. Varje <code class=\"docutils literal notranslate\">Loader</code>-klass vet hur man importerar mallar från en viss källa. Alternativt kan en tupel användas i stället för en sträng. Det första objektet i tupeln bör vara klassnamnet för <code class=\"docutils literal notranslate\">Loader</code>, efterföljande objekt skickas till <code class=\"docutils literal notranslate\">Loader</code> under initialiseringen.</p>\n<p>Den innehåller som standard en lista:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'django.template.loaders.filesystem.Loader'</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">'django.template.loaders.app_directories.Loader'</code> om och endast om <code class=\"docutils literal notranslate\">app_dirs</code> är <code class=\"docutils literal notranslate\">True</code>.</p></li>\n</ul>\n<p>Dessa laddare är sedan inkapslade i <a class=\"reference internal\" href=\"#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\">django.template.loaders.cached.Loader</code></a>.</p>\n<p>Se <a class=\"reference internal\" href=\"#template-loaders\"><span class=\"std std-ref\">Typer av lastare</span></a> för mer information.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">string_if_invalid</code> är utdata i form av en sträng som mallsystemet ska använda för ogiltiga (t.ex. felstavade) variabler.</p>\n<p>Standardvärdet är den tomma strängen.</p>\n<p>Se <a class=\"reference internal\" href=\"#invalid-template-variables\"><span class=\"std std-ref\">Hur ogiltiga variabler hanteras</span></a> för mer information.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">file_charset</code> är det teckensnitt som används för att läsa mallfiler på disken.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">'utf-8'</code>.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'bibliotek'</code>: En ordbok med etiketter och prickade Python-sökvägar för malltaggmoduler som ska registreras med mallmotorn. Detta används för att lägga till nya bibliotek eller tillhandahålla alternativa etiketter för befintliga bibliotek. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Engine<span class=\"p\">(</span>\n    libraries<span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;myapp_tags&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;path.to.myapp.tags&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;admin.urls&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.admin.templatetags.admin_urls&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Bibliotek kan laddas genom att skicka motsvarande ordboksnyckel till taggen <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\">{% load %}</code></a>.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">'builtins'</code>: En lista med prickade Python-sökvägar för malltaggmoduler som ska läggas till i <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/\"><span class=\"doc\">built-ins</span></a>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Engine<span class=\"p\">(</span>\n    builtins<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;myapp.builtins&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Taggar och filter från inbyggda bibliotek kan användas utan att först anropa taggen <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-load\"><code class=\"xref std std-ttag docutils literal notranslate\">{% load %}</code></a>.</p>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.get_default\">\n<em class=\"property\"><span class=\"k\">static</span> </em><span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">get_default</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.get_default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar den underliggande <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> från den första konfigurerade <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>-motorn. Utlöser <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\">ImproperlyConfigured</code></a> om inga motorer är konfigurerade.</p>\n<p>Det krävs för att bevara API:er som förlitar sig på en globalt tillgänglig, implicit konfigurerad motor. All annan användning är starkt avrådd.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.from_string\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">from_string</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_code</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.from_string\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Kompilerar den angivna mallkoden och returnerar ett <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>-objekt.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.get_template\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">get_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.get_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Läser in en mall med det angivna namnet, kompilerar den och returnerar ett <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>-objekt.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Engine.select_template\">\n<span class=\"sig-prename descclassname\">Engine.</span><span class=\"sig-name descname\">select_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name_list</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Engine.select_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Som <a class=\"reference internal\" href=\"#django.template.Engine.get_template\" title=\"django.template.Engine.get_template\"><code class=\"xref py py-meth docutils literal notranslate\">get_template()</code></a>, förutom att den tar en lista med namn och returnerar den första mallen som hittades.</p>\n</dd></dl>\n\n</section>\n<section id=\"loading-a-template\">\n<h2>Ladda en mall<a class=\"heading-anchor\" href=\"#loading-a-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det rekommenderade sättet att skapa en <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> är att anropa fabriksmetoderna i <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a>: <a class=\"reference internal\" href=\"#django.template.Engine.get_template\" title=\"django.template.Engine.get_template\"><code class=\"xref py py-meth docutils literal notranslate\">get_template()</code></a>, <a class=\"reference internal\" href=\"#django.template.Engine.select_template\" title=\"django.template.Engine.select_template\"><code class=\"xref py py-meth docutils literal notranslate\">select_template()</code></a> och <a class=\"reference internal\" href=\"#django.template.Engine.from_string\" title=\"django.template.Engine.from_string\"><code class=\"xref py py-meth docutils literal notranslate\">from_string()</code></a>.</p>\n<p>I ett Django-projekt där inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> definierar en <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>-motor, är det möjligt att instansiera en <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> direkt. Om mer än en <code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code>-motor är definierad, kommer den första att användas.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Template\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Template</span><a class=\"heading-anchor\" href=\"#django.template.Template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Denna klass lever på <code class=\"docutils literal notranslate\">django.template.Template</code>. Konstruktören tar ett argument - den råa mallkoden:</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=\"nn\">django.template</span> <span class=\"kn\">import</span> Template\n\ntemplate <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ my_name }}.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition-behind-the-scenes admonition\" role=\"note\">\n<p class=\"admonition-title\">Bakom kulisserna</p>\n<p>Systemet analyserar bara din råa mallkod en gång - när du skapar objektet <code class=\"docutils literal notranslate\">Template</code>. Från och med då lagras den internt som en trädstruktur för prestanda.</p>\n<p>Även själva parsningen är ganska snabb. Det mesta av parsningen sker via ett enda anrop till ett enda, kort, reguljärt uttryck.</p>\n</aside>\n</section>\n<section id=\"rendering-a-context\">\n<h2>Rendering av en kontext<a class=\"heading-anchor\" href=\"#rendering-a-context\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du har ett kompilerat <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>-objekt kan du rendera en kontext med det. Du kan återanvända samma mall för att rendera den flera gånger med olika kontexter.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Context</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">dict_<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">autoescape<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">use_l10n<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">use_tz<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Konstruktören för <code class=\"docutils literal notranslate\">django.template.Context</code> tar ett valfritt argument - en ordbok som mappar variabelnamn till variabelvärden.</p>\n<p>Tre valfria nyckelordsargument kan också anges:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">autoescape</code> kontrollerar om HTML autoescaping är aktiverat.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">True</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Sätt den bara till <code class=\"docutils literal notranslate\">False</code> om du renderar icke-HTML-mallar!</p>\n</aside>\n</li>\n<li><p><code class=\"docutils literal notranslate\">use_l10n</code> åsidosätter om värden ska lokaliseras som standard. Om inställningen är <code class=\"docutils literal notranslate\">True</code> kommer siffror och datum att formateras baserat på lokal.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/topics/i18n/formatting/#topic-l10n-templates\"><span class=\"std std-ref\">Styrning av lokalisering i mallar</span></a> för detaljer.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\">use_tz</code> åsidosätter om datum konverteras till lokal tid när de återges i en mall. Om inställningen är <code class=\"docutils literal notranslate\">True</code> kommer alla datum att återges med den lokala tidszonen. Detta har företräde framför <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a>.</p>\n<p>Standardvärdet är <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>Se <span class=\"xref std std-ref\">tidszoner-i-mallar</span> för mer information.</p>\n</li>\n</ul>\n<p>För exempel på användning, se <a class=\"reference internal\" href=\"#playing-with-context\"><span class=\"std std-ref\">Leka med Context-objekt</span></a> nedan.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Template.render\">\n<span class=\"sig-prename descclassname\">Template.</span><span class=\"sig-name descname\">render</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Template.render\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Anropa <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a>-objektets <code class=\"docutils literal notranslate\">render()</code>-metod med en <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> för att ”fylla” mallen:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context<span class=\"p\">,</span> Template\n<span class=\"gp\">&gt;&gt;&gt; </span>template <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ my_name }}.&quot;</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>context <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adrian&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">)</span>\n<span class=\"go\">&quot;My name is Adrian.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>context <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Dolores&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">)</span>\n<span class=\"go\">&quot;My name is Dolores.&quot;</span>\n</code></pre></div>\n</dd></dl>\n\n<section id=\"variables-and-lookups\">\n<h3>Variabler och uppslagsord<a class=\"heading-anchor\" href=\"#variables-and-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Variabelnamn får bestå av valfri bokstav (A-Z), valfri siffra (0-9), en understrykning (men de får inte börja med en understrykning) eller en punkt.</p>\n<p>Prickar har en speciell betydelse i mallrendering. En punkt i ett variabelnamn betyder en <strong>uppslagning</strong>. När mallsystemet stöter på en punkt i ett variabelnamn försöker det med följande uppslagningar, i den här ordningen:</p>\n<ul class=\"simple\">\n<li><p>Uppslagning i ordbok. Exempel: <code class=\"docutils literal notranslate\">foo[&quot;bar&quot;]</code></p></li>\n<li><p>Uppslagning av attribut. Exempel: <code class=\"docutils literal notranslate\">foo.bar</code></p></li>\n<li><p>Uppslagning i listindex. Exempel: <code class=\"docutils literal notranslate\">foo[bar]</code></p></li>\n</ul>\n<p>Observera att ”bar” i ett malluttryck som <code class=\"docutils literal notranslate\">{{ foo.bar }}</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>Mallsystemet använder den första uppslagstypen som fungerar. Det är kortslutningslogik. Här är några exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context<span class=\"p\">,</span> Template\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.first_name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>d <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Johnson&quot;</span><span class=\"p\">}}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">(</span>d<span class=\"p\">))</span>\n<span class=\"go\">&quot;My name is Joe.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">pass</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>first_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Ron&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>last_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Nasty&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is Ron.&quot;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;The first stooge in the list is {{ stooges.0 }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;stooges&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Larry&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Curly&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Moe&quot;</span><span class=\"p\">]})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>c<span class=\"p\">)</span>\n<span class=\"go\">&quot;The first stooge in the list is Larry.&quot;</span>\n</code></pre></div>\n<p>Om någon del av variabeln är anropsbar kommer mallsystemet att försöka anropa den. Exempel på detta:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass2</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> <span class=\"s2\">&quot;Samantha&quot;</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> PersonClass2<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is Samantha.&quot;</span>\n</code></pre></div>\n<p>Kallbara variabler är något mer komplexa än variabler som bara kräver direkta uppslagningar. Här är några saker att tänka på:</p>\n<ul>\n<li><p>Om variabeln ger upphov till ett undantag när den anropas kommer undantaget att spridas, såvida inte undantaget har ett attribut <code class=\"docutils literal notranslate\">silent_variable_failure</code> vars värde är <code class=\"docutils literal notranslate\">True</code>. Om undantaget <em>har</em> ett attribut <code class=\"docutils literal notranslate\">silent_variable_failure</code> vars värde är <code class=\"docutils literal notranslate\">True</code>, kommer variabeln att återges som värdet av motorns konfigurationsalternativ <code class=\"docutils literal notranslate\">string_if_invalid</code> (en tom sträng som standard). Exempel på detta:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>t <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;My name is {{ person.first_name }}.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass3</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">raise</span> <span class=\"ne\">AssertionError</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass3<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">AssertionError</span>: foo\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">SilentAssertionError</span><span class=\"p\">(</span><span class=\"ne\">Exception</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    silent_variable_failure <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">PersonClass4</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">raise</span> SilentAssertionError\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> PersonClass4<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>t<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s2\">&quot;person&quot;</span><span class=\"p\">:</span> p<span class=\"p\">}))</span>\n<span class=\"go\">&quot;My name is .&quot;</span>\n</code></pre></div>\n<p>Observera att <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ObjectDoesNotExist\" title=\"django.core.exceptions.ObjectDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">django.core.exceptions.ObjectDoesNotExist</code></a>, som är basklassen för alla Django databas API <code class=\"docutils literal notranslate\">DoesNotExist</code> undantag, har <code class=\"docutils literal notranslate\">silent_variable_failure = True</code>. Så om du använder Django-mallar med Django-modellobjekt, kommer alla <code class=\"docutils literal notranslate\">DoesNotExist</code>-undantag att misslyckas tyst.</p>\n</li>\n<li><p>En variabel kan bara anropas om den inte har några nödvändiga argument. I annat fall returnerar systemet värdet på motorns alternativ <code class=\"docutils literal notranslate\">string_if_invalid</code>.</p></li>\n</ul>\n<ul id=\"alters-data-description\">\n<li><p>Det kan finnas bieffekter när man anropar vissa variabler, och det skulle vara antingen dumt eller ett säkerhetshål att låta mallsystemet komma åt dem.</p>\n<p>Ett bra exempel är <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>-metoden på varje Django-modellobjekt. Mallsystemet bör inte tillåtas att göra något liknande:</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>I will now delete this valuable data. <span class=\"cp\">{{</span> <span class=\"nv\">data.delete</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>För att förhindra detta ska du ange attributet <code class=\"docutils literal notranslate\">alters_data</code> för den anropbara variabeln. Mallsystemet kommer inte att anropa en variabel om den har <code class=\"docutils literal notranslate\">alters_data=True</code> inställd, och kommer istället att ersätta variabeln med <code class=\"docutils literal notranslate\">string_if_invalid</code>, ovillkorligen.  De dynamiskt genererade <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> metoderna på Django modellobjekt får <code class=\"docutils literal notranslate\">alters_data=True</code> automatiskt. Exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">sensitive_function</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span>database_record<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n\n\nsensitive_function<span class=\"o\">.</span>alters_data <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n</li>\n<li><p>Ibland kanske du vill stänga av den här funktionen av andra skäl och tala om för mallsystemet att en variabel ska lämnas oanropad oavsett vad som händer.  För att göra det, ställ in ett <code class=\"docutils literal notranslate\">do_not_call_in_templates</code>-attribut på den anropbara variabeln med värdet <code class=\"docutils literal notranslate\">True</code>.  Mallsystemet kommer då att agera som om din variabel inte är anropsbar (så att du till exempel kan komma åt attribut för den anropsbara variabeln).</p></li>\n</ul>\n</section>\n<section id=\"how-invalid-variables-are-handled\">\n<span id=\"invalid-template-variables\"></span><h3>Hur ogiltiga variabler hanteras<a class=\"heading-anchor\" href=\"#how-invalid-variables-are-handled\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om en variabel inte finns infogar mallsystemet i allmänhet värdet för motorns konfigurationsalternativ <code class=\"docutils literal notranslate\">string_if_invalid</code>, som är inställt på <code class=\"docutils literal notranslate\">''</code> (den tomma strängen) som standard.</p>\n<p>Filter som tillämpas på en ogiltig variabel tillämpas endast om <code class=\"docutils literal notranslate\">string_if_invalid</code> är inställd på <code class=\"docutils literal notranslate\">''</code> (den tomma strängen). Om <code class=\"docutils literal notranslate\">string_if_invalid</code> är satt till något annat värde ignoreras variabelfiltren.</p>\n<p>Detta beteende är något annorlunda för malltaggarna <code class=\"docutils literal notranslate\">if</code>, <code class=\"docutils literal notranslate\">for</code> och <code class=\"docutils literal notranslate\">regroup</code>. Om en ogiltig variabel anges i en av dessa malltaggar tolkas variabeln som <code class=\"docutils literal notranslate\">None</code>. Filter tillämpas alltid på ogiltiga variabler inom dessa malltaggar.</p>\n<p>Om <code class=\"docutils literal notranslate\">string_if_invalid</code> innehåller en <code class=\"docutils literal notranslate\">'%s'</code> ersätts formatmarkören med namnet på den ogiltiga variabeln.</p>\n<aside class=\"admonition-for-debug-purposes-only admonition\" role=\"note\">\n<p class=\"admonition-title\">Endast för felsökningsändamål!</p>\n<p>Även om <code class=\"docutils literal notranslate\">string_if_invalid</code> kan vara ett användbart felsökningsverktyg är det en dålig idé att aktivera det som en ”utvecklingsstandard”.</p>\n<p>Många mallar, inklusive några av Djangos, förlitar sig på mallsystemets tystnad när en icke-existerande variabel påträffas. Om du tilldelar ett annat värde än <code class=\"docutils literal notranslate\">''</code> till <code class=\"docutils literal notranslate\">string_if_invalid</code>, kommer du att uppleva renderingsproblem med dessa mallar och webbplatser.</p>\n<p>I allmänhet bör <code class=\"docutils literal notranslate\">string_if_invalid</code> endast aktiveras för att felsöka ett specifikt mallproblem, och sedan tas bort när felsökningen är klar.</p>\n</aside>\n</section>\n<section id=\"built-in-variables\">\n<h3>Inbyggda variabler<a class=\"heading-anchor\" href=\"#built-in-variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Varje kontext innehåller <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code> och <code class=\"docutils literal notranslate\">None</code>. Som du kan förvänta dig löses dessa variabler upp till motsvarande Python-objekt.</p>\n</section>\n<section id=\"limitations-with-string-literals\">\n<h3>Begränsningar med stränglitteraler<a class=\"heading-anchor\" href=\"#limitations-with-string-literals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Djangos mallspråk har inget sätt att undkomma de tecken som används för dess egen syntax. Till exempel: krävs taggen <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-templatetag\"><code class=\"xref std std-ttag docutils literal notranslate\">templatetag</code></a> om du behöver skriva ut teckensekvenser som <code class=\"docutils literal notranslate\">{%</code> och <code class=\"docutils literal notranslate\">%}</code>.</p>\n<p>Ett liknande problem finns om du vill inkludera dessa sekvenser i mallfilter eller taggargument. Till exempel:, när man analyserar en block-tagg, letar Djangos mallanalysator efter den första förekomsten av <code class=\"docutils literal notranslate\">%}</code> efter en <code class=\"docutils literal notranslate\">{%</code>. Detta förhindrar användningen av <code class=\"docutils literal notranslate\">&quot;%}&quot;</code> som en bokstavlig sträng. Till exempel: kommer ett <code class=\"docutils literal notranslate\">TemplateSyntaxError</code> att uppstå för följande uttryck:</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;template.html&quot;</span> <span class=\"nv\">tvar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Some string literal with %} in it.&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">with</span> <span class=\"nv\">tvar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Some string literal with %} in it.&quot;</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endwith</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Samma problem kan uppstå om man använder en reserverad sekvens i filterargument:</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\">some.variable</span><span class=\"o\">|</span><span class=\"nf\">default</span><span class=\"s2\">:&quot;}}&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Om du behöver använda strängar med dessa sekvenser kan du lagra dem i mallvariabler eller använda en anpassad malltagg eller ett filter för att kringgå begränsningen.</p>\n</section>\n</section>\n<section id=\"playing-with-context-objects\">\n<span id=\"playing-with-context\"></span><h2>Leka med <code class=\"docutils literal notranslate\">Context</code>-objekt<a class=\"heading-anchor\" href=\"#playing-with-context-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För det mesta instansierar du <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a>-objekt genom att skicka in en fullständigt fylld ordbok till <code class=\"docutils literal notranslate\">Context()</code>. Men du kan också lägga till och ta bort objekt från ett <code class=\"docutils literal notranslate\">Context</code>-objekt när det har instantierats, med hjälp av standardordbokssyntax:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> Context\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;bar&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">del</span> c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">KeyError</span>: &#39;foo&#39;\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;newvariable&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;hello&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;newvariable&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;hello&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.get\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">get</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">key</em>, <em class=\"sig-param\">otherwise<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar värdet för <code class=\"docutils literal notranslate\">key</code> om <code class=\"docutils literal notranslate\">key</code> finns i kontexten, annars returneras <code class=\"docutils literal notranslate\">annat</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.setdefault\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">setdefault</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">key</em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.setdefault\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Om <code class=\"docutils literal notranslate\">key</code> finns i kontexten returneras dess värde. Annars infogar <code class=\"docutils literal notranslate\">key</code> med värdet <code class=\"docutils literal notranslate\">default</code> och returnerar <code class=\"docutils literal notranslate\">default</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.pop\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">pop</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.pop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.push\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">push</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.push\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py exception\">\n<dt class=\"sig sig-object py\" id=\"django.template.ContextPopException\">\n<em class=\"property\"><span class=\"k\">exception</span> </em><span class=\"sig-name descname\">ContextPopException</span><a class=\"heading-anchor\" href=\"#django.template.ContextPopException\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ett <code class=\"docutils literal notranslate\">Context</code>-objekt är en stack. Det vill säga, du kan <code class=\"docutils literal notranslate\">push()</code> och <code class=\"docutils literal notranslate\">pop()</code> det. Om du <code class=\"docutils literal notranslate\">pop()</code> för mycket, kommer det att ge upphov till <code class=\"docutils literal notranslate\">django.template.ContextPopException</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>push<span class=\"p\">()</span>\n<span class=\"go\">{}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;overwritten&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;overwritten&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ContextPopException</span>\n</code></pre></div>\n<p>Du kan också använda <code class=\"docutils literal notranslate\">push()</code> som en kontexthanterare för att säkerställa att en matchande <code class=\"docutils literal notranslate\">pop()</code> anropas.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>push<span class=\"p\">():</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p>Alla argument som skickas till <code class=\"docutils literal notranslate\">push()</code> kommer att skickas till <code class=\"docutils literal notranslate\">dict</code>-konstruktören som används för att bygga den nya kontextnivån.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>push<span class=\"p\">(</span>foo<span class=\"o\">=</span><span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.update\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">update</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">other_dict</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Förutom <code class=\"docutils literal notranslate\">push()</code> och <code class=\"docutils literal notranslate\">pop()</code> definierar objektet <code class=\"docutils literal notranslate\">Context</code> också en metod för <code class=\"docutils literal notranslate\">update()</code>. Denna fungerar som <code class=\"docutils literal notranslate\">push()</code> men tar en ordbok som argument och skjuter den ordboken på stacken istället för en tom.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;updated&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;updated&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;updated&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>pop<span class=\"p\">()</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;updated&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p>Precis som <code class=\"docutils literal notranslate\">push()</code> kan du använda <code class=\"docutils literal notranslate\">update()</code> som en kontexthanterare för att säkerställa att en matchande <code class=\"docutils literal notranslate\">pop()</code> anropas.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">}):</span>\n<span class=\"gp\">... </span>    c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&#39;second level&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;first level&#39;</span>\n</code></pre></div>\n<p>Att använda en <code class=\"docutils literal notranslate\">Context</code> som en stack är praktiskt i <a class=\"reference internal\" href=\"/sv/5.2/howto/custom-template-tags/#howto-writing-custom-template-tags\"><span class=\"std std-ref\">några anpassade malltaggar</span></a>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.Context.flatten\">\n<span class=\"sig-prename descclassname\">Context.</span><span class=\"sig-name descname\">flatten</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.Context.flatten\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Med hjälp av metoden <code class=\"docutils literal notranslate\">flatten()</code> kan du få hela <code class=\"docutils literal notranslate\">Context</code>-stacken som en ordbok inklusive inbyggda variabler.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;bar&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c<span class=\"o\">.</span>flatten<span class=\"p\">()</span>\n<span class=\"go\">{&#39;True&#39;: True, &#39;None&#39;: None, &#39;foo&#39;: &#39;first level&#39;, &#39;False&#39;: False, &#39;bar&#39;: &#39;second level&#39;}</span>\n</code></pre></div>\n<p>En <code class=\"docutils literal notranslate\">flatten()</code>-metod används också internt för att göra <code class=\"docutils literal notranslate\">Context</code>-objekt jämförbara.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>c1 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1<span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;first level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1<span class=\"p\">[</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;second level&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c2 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c2<span class=\"o\">.</span>update<span class=\"p\">({</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;second level&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;first level&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">{&#39;foo&#39;: &#39;first level&#39;, &#39;bar&#39;: &#39;second level&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>c1 <span class=\"o\">==</span> c2\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Resultatet från <code class=\"docutils literal notranslate\">flatten()</code> kan vara användbart i enhetstester för att jämföra <code class=\"docutils literal notranslate\">Context</code> mot <code class=\"docutils literal notranslate\">dict</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ContextTest</span><span class=\"p\">(</span>unittest<span class=\"o\">.</span>TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_against_dictionary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        c1 <span class=\"o\">=</span> Context<span class=\"p\">()</span>\n        c1<span class=\"p\">[</span><span class=\"s2\">&quot;update&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;value&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>\n            c1<span class=\"o\">.</span>flatten<span class=\"p\">(),</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;True&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;None&quot;</span><span class=\"p\">:</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;False&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;update&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;value&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"using-requestcontext\">\n<span id=\"subclassing-context-requestcontext\"></span><h3>Använda <code class=\"docutils literal notranslate\">RequestContext</code><a class=\"heading-anchor\" href=\"#using-requestcontext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.RequestContext\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RequestContext</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">dict_<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">processors<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">use_l10n<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">use_tz<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">autoescape<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.RequestContext\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django kommer med en speciell <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a>-klass, <code class=\"docutils literal notranslate\">django.template.RequestContext</code>, som fungerar något annorlunda än den normala <code class=\"docutils literal notranslate\">django.template.Context</code>. Den första skillnaden är att den tar en <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> som sitt första argument. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>c <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>\n    request<span class=\"p\">,</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Den andra skillnaden är att den automatiskt fyller i kontexten med några variabler, enligt motorns konfigurationsalternativ <code class=\"docutils literal notranslate\">context_processors</code>.</p>\n<p>Alternativet <code class=\"docutils literal notranslate\">context_processors</code> är en lista över anropbara objekt - kallade <strong>kontextprocessorer</strong> - som tar ett request-objekt som argument och returnerar en ordbok med objekt som ska sammanfogas i kontexten. I den standardgenererade inställningsfilen innehåller standardmallmotorn följande kontextprocessorer:</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=\"p\">[</span>\n    <span class=\"s2\">&quot;django.template.context_processors.request&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.context_processors.auth&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.messages.context_processors.messages&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Utöver dessa aktiverar <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> alltid <code class=\"docutils literal notranslate\">'django.template.context_processors.csrf'</code>.  Detta är en säkerhetsrelaterad kontextprocessor som krävs av admin och andra contrib-appar, och i händelse av oavsiktlig felkonfiguration är den avsiktligt hårdkodad och kan inte stängas av i alternativet <code class=\"docutils literal notranslate\">context_processors</code>.</p>\n<p>Varje processor tillämpas i tur och ordning. Det innebär att om en processor lägger till en variabel i sammanhanget och en andra processor lägger till en variabel med samma namn, kommer den andra processorn att åsidosätta den första. Standardprocessorerna förklaras nedan.</p>\n<aside class=\"admonition-when-context-processors-are-applied admonition\" role=\"note\">\n<p class=\"admonition-title\">När kontextprocessorer används</p>\n<p>Kontextprocessorer tillämpas ovanpå kontextdata. Detta innebär att en kontextprocessor kan skriva över variabler som du har angett i din <a class=\"reference internal\" href=\"#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> eller <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>, så se till att undvika variabelnamn som överlappar med dem som anges av dina kontextprocessorer.</p>\n<p>Om du vill att kontextdata ska prioriteras framför kontextprocessorer använder du följande mönster:</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=\"nn\">django.template</span> <span class=\"kn\">import</span> RequestContext\n\nrequest_context <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>request<span class=\"p\">)</span>\nrequest_context<span class=\"o\">.</span>push<span class=\"p\">({</span><span class=\"s2\">&quot;my_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adrian&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Django gör detta för att tillåta att kontextdata åsidosätter kontextprocessorer i API:er som <a class=\"reference internal\" href=\"/sv/5.2/topics/http/shortcuts/#django.shortcuts.render\" title=\"django.shortcuts.render\"><code class=\"xref py py-func docutils literal notranslate\">render()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponse</code></a>.</p>\n</aside>\n<p>Du kan också ge <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> en lista över ytterligare processorer genom att använda det valfria, tredje positionsargumentet, <code class=\"docutils literal notranslate\">processors</code>. I detta exempel får <a class=\"reference internal\" href=\"#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>-instansen en <code class=\"docutils literal notranslate\">ip_address</code>-variabel:</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=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"kn\">import</span> RequestContext<span class=\"p\">,</span> Template\n\n\n<span class=\"k\">def</span> <span class=\"nf\">ip_address_processor</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;ip_address&quot;</span><span class=\"p\">:</span> request<span class=\"o\">.</span>META<span class=\"p\">[</span><span class=\"s2\">&quot;REMOTE_ADDR&quot;</span><span class=\"p\">]}</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">client_ip_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    template <span class=\"o\">=</span> Template<span class=\"p\">(</span><span class=\"s2\">&quot;{{ title }}: {{ ip_address }}&quot;</span><span class=\"p\">)</span>\n    context <span class=\"o\">=</span> RequestContext<span class=\"p\">(</span>\n        request<span class=\"p\">,</span>\n        <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Your IP Address&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"p\">[</span>ip_address_processor<span class=\"p\">],</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span>template<span class=\"o\">.</span>render<span class=\"p\">(</span>context<span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"built-in-template-context-processors\">\n<span id=\"context-processors\"></span><h3>Inbyggda processorer för mallkontext<a class=\"heading-anchor\" href=\"#built-in-template-context-processors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Här är vad var och en av de inbyggda processorerna gör:</p>\n<section id=\"django-contrib-auth-context-processors-auth\">\n<h4><code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.auth</code><a class=\"heading-anchor\" href=\"#django-contrib-auth-context-processors-auth\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.context_processors.auth\">\n<span class=\"sig-name descname\">auth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.context_processors.auth\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla dessa variabler:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">user</code> – En <code class=\"docutils literal notranslate\">auth.User</code>-instans som representerar den användare som för närvarande är inloggad (eller en <code class=\"docutils literal notranslate\">AnonymousUser</code>-instans om klienten inte är inloggad).</p></li>\n<li><p><code class=\"docutils literal notranslate\">perms</code> – En instans av <code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.PermWrapper</code>, som representerar de behörigheter som den för närvarande inloggade användaren har.</p></li>\n</ul>\n</section>\n<section id=\"django-template-context-processors-debug\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.debug</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-debug\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.debug\">\n<span class=\"sig-name descname\">debug</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.debug\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om den här processorn är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla dessa två variabler - men bara om inställningen <code class=\"xref std std-setting docutils literal notranslate\">DEBUG`</code> är satt till <code class=\"docutils literal notranslate\">True</code> och begärans IP-adress (<code class=\"docutils literal notranslate\">request.META['REMOTE_ADDR']</code>) finns i inställningen <code class=\"xref std std-setting docutils literal notranslate\">INTERNAL_IPS`</code>:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">debug</code> – <code class=\"docutils literal notranslate\">True</code>. Du kan använda detta i mallar för att testa om du är i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a>-läge.</p></li>\n<li><p><code class=\"docutils literal notranslate\">sql_queries</code> – En lista med <code class=\"docutils literal notranslate\">{'sql': ..., 'time': ...}</code> dictionaries, som representerar varje SQL-fråga som har skett hittills under begäran och hur lång tid det tog. Listan är ordnad efter databasalias och sedan efter fråga. Den genereras lättsamt vid åtkomst.</p></li>\n</ul>\n</section>\n<section id=\"django-template-context-processors-i18n\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.i18n</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-i18n\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.i18n\">\n<span class=\"sig-name descname\">i18n</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.i18n\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla dessa variabler:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">LANGUAGES</code> – Värdet på inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">LANGUAGE_BIDI</code> – <code class=\"docutils literal notranslate\">True</code> om det aktuella språket är ett höger-till-vänster-språk, t.ex. hebreiska, arabiska. <code class=\"docutils literal notranslate\">False</code> om det är ett vänster till höger-språk, t.ex. engelska, franska, tyska.</p></li>\n<li><p><code class=\"docutils literal notranslate\">LANGUAGE_CODE</code> – <code class=\"docutils literal notranslate\">request.LANGUAGE_CODE</code>, om det finns. Annars värdet av inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGE_CODE</code></a>.</p></li>\n</ul>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/topics/i18n/translation/#i18n-template-tags\"><span class=\"std std-ref\">i18n malltaggar</span></a> för malltaggar som genererar samma värden.</p>\n</section>\n<section id=\"django-template-context-processors-media\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.media</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-media\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla en variabel <code class=\"docutils literal notranslate\">MEDIA_URL</code>, som anger värdet på inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a>.</p>\n</section>\n<section id=\"django-template-context-processors-static\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.static</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-static\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.static\">\n<span class=\"sig-name descname\">static</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.static\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla en variabel <code class=\"docutils literal notranslate\">STATIC_URL</code> som anger värdet på inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a>.</p>\n</section>\n<section id=\"django-template-context-processors-csrf\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.csrf</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-csrf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Denna processor lägger till en token som behövs av malltaggen <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\">csrf_token</code></a> för skydd mot <a class=\"reference internal\" href=\"/sv/5.2/ref/csrf/\"><span class=\"doc\">Cross Site Request Forgeries</span></a>.</p>\n</section>\n<section id=\"django-template-context-processors-request\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.request</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla en variabel <code class=\"docutils literal notranslate\">request</code>, som är den aktuella <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>.</p>\n</section>\n<section id=\"django-template-context-processors-tz\">\n<h4><code class=\"docutils literal notranslate\">django.template.context_processors.tz</code><a class=\"heading-anchor\" href=\"#django-template-context-processors-tz\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.template.context_processors.tz\">\n<span class=\"sig-name descname\">tz</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.context_processors.tz\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla en variabel <code class=\"docutils literal notranslate\">TIME_ZONE</code>, som anger namnet på den aktuella aktiva tidszonen.</p>\n</section>\n<section id=\"django-contrib-messages-context-processors-messages\">\n<h4><code class=\"docutils literal notranslate\">django.contrib.messages.context_processors.messages</code><a class=\"heading-anchor\" href=\"#django-contrib-messages-context-processors-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om denna processor är aktiverad kommer varje <code class=\"docutils literal notranslate\">RequestContext</code> att innehålla dessa två variabler:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">messages</code> – En lista över meddelanden (som strängar) som har ställts in via <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/messages/\"><span class=\"doc\">messages framework</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">DEFAULT_MESSAGE_LEVELS</code> – En mappning av meddelandenivåernas namn till <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/messages/#message-level-constants\"><span class=\"std std-ref\">deras numeriska värde</span></a>.</p></li>\n</ul>\n</section>\n</section>\n<section id=\"writing-your-own-context-processors\">\n<h3>Skriva dina egna kontextprocessorer<a class=\"heading-anchor\" href=\"#writing-your-own-context-processors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En kontextprocessor har ett enkelt gränssnitt: Det är en Python-funktion som tar ett argument, ett <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a>-objekt, och returnerar en ordbok som läggs till i mallkontexten.</p>\n<p>Till exempel:, för att lägga till inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a> i varje kontext:</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=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n\n\n<span class=\"k\">def</span> <span class=\"nf\">from_email</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;DEFAULT_FROM_EMAIL&quot;</span><span class=\"p\">:</span> settings<span class=\"o\">.</span>DEFAULT_FROM_EMAIL<span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Anpassade kontextprocessorer kan finnas var som helst i din kodbas. Allt Django bryr sig om är att dina anpassade kontextprocessorer pekas ut av alternativet <code class=\"docutils literal notranslate\">'context_processors'</code> i din inställning <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> - eller argumentet <code class=\"docutils literal notranslate\">context_processors</code> i <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> om du använder det direkt.</p>\n</section>\n</section>\n<section id=\"loading-templates\">\n<h2>Laddning av mallar<a class=\"heading-anchor\" href=\"#loading-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Generellt sett lagrar du mallar i filer på ditt filsystem snarare än att använda lågnivå <a class=\"reference internal\" href=\"#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">Template</code></a> API själv. Spara mallar i en katalog som anges som en <strong>mallkatalog</strong>.</p>\n<p>Django söker efter mallkataloger på ett antal ställen, beroende på dina inställningar för mallladdning (se ”Laddningstyper” nedan), men det mest grundläggande sättet att ange mallkataloger är genom att använda alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a>.</p>\n<section id=\"the-dirs-option\">\n<h3>Alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a><a class=\"heading-anchor\" href=\"#the-dirs-option\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Berätta för Django vilka dina mallkataloger är genom att använda alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> i inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> i din inställningsfil - eller argumentet <code class=\"docutils literal notranslate\">dirs</code> i <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a>. Detta bör ställas in på en lista med strängar som innehåller fullständiga sökvägar till dina mallkataloger:</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n            <span class=\"s2\">&quot;/home/html/templates/lawrence.com&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;/home/html/templates/default&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">],</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Dina mallar kan placeras var du vill, så länge katalogerna och mallarna kan läsas av webbservern. De kan ha vilket tillägg du vill, t.ex. <code class=\"docutils literal notranslate\">.html</code> eller <code class=\"docutils literal notranslate\">.txt</code>, eller inget tillägg alls.</p>\n<p>Observera att dessa sökvägar ska använda snedstreck i Unix-stil, även under Windows.</p>\n</section>\n<section id=\"loader-types\">\n<span id=\"template-loaders\"></span><h3>Typer av lastare<a class=\"heading-anchor\" href=\"#loader-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som standard använder Django en filsystembaserad mallladdare, men Django levereras med några andra mallladdare, som vet hur man laddar mallar från andra källor.</p>\n<p>Några av dessa andra laddare är inaktiverade som standard, men du kan aktivera dem genom att lägga till ett <code class=\"docutils literal notranslate\">'loaders'</code> alternativ till din <code class=\"docutils literal notranslate\">DjangoTemplates</code> backend i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> inställningen eller skicka ett <code class=\"docutils literal notranslate\">loaders</code> argument till <a class=\"reference internal\" href=\"#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a>. <code class=\"docutils literal notranslate\">loaders</code> bör vara en lista med strängar eller tupler, där var och en representerar en mallinläsningsklass. Här är de mallinläsare som följer med Django:</p>\n<p><code class=\"docutils literal notranslate\">django.template.loaders.filesystem.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.filesystem.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">filesystem.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.filesystem.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Läser in mallar från filsystemet enligt <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a>.</p>\n<p>Den här laddaren är aktiverad som standard. Den kommer dock inte att hitta några mallar förrän du ställer in <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> till en icke-tom lista:</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Du kan också åsidosätta <code class=\"docutils literal notranslate\">'DIRS'</code> och ange specifika kataloger för en viss filsystemladdare:</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.app_directories.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.app_directories.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">app_directories.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.app_directories.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Laddar mallar från Django-appar på filsystemet. För varje app i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> letar laddaren efter en underkatalog med namnet <code class=\"docutils literal notranslate\">templates</code>. Om katalogen finns letar Django efter mallar i den.</p>\n<p>Detta innebär att du kan lagra mallar med dina enskilda appar. Detta hjälper också till att distribuera Django-appar med standardmallar.</p>\n<p>Till exempel:, för denna inställning:</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>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;myproject.polls&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;myproject.music&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>…då kommer <code class=\"docutils literal notranslate\">get_template('foo.html')</code> att leta efter <code class=\"docutils literal notranslate\">foo.html</code> i dessa kataloger, i denna ordning:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">/path/to/myproject/polls/templates/</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">/path/to/myproject/music/templates/</code></p></li>\n</ul>\n<p>… och kommer att använda den som den hittar först.</p>\n<p>Ordningen på <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> är viktig! Om du till exempel vill anpassa Django-adminen kan du välja att åsidosätta standardmallen <code class=\"docutils literal notranslate\">admin/base_site.html</code> från <code class=\"docutils literal notranslate\">django.contrib.admin</code> med din egen <code class=\"docutils literal notranslate\">admin/base_site.html</code> i <code class=\"docutils literal notranslate\">myproject.polls</code>. Du måste då se till att din <code class=\"docutils literal notranslate\">myproject.polls</code> kommer <em>före</em> <code class=\"docutils literal notranslate\">django.contrib.admin</code> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, annars kommer <code class=\"docutils literal notranslate\">django.contrib.admin</code> att laddas först och din kommer att ignoreras.</p>\n<p>Observera att laddaren utför en optimering när den körs första gången: den cachar en lista över vilka <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>-paket som har en <code class=\"docutils literal notranslate\">templates</code>-underkatalog.</p>\n<p>Du kan aktivera den här laddaren genom att ställa in <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">APP_DIRS</code></a> till <code class=\"docutils literal notranslate\">True</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.cached.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.cached.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">cached.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.cached.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Djangos mallsystem är visserligen ganska snabbt, men om det behöver läsa och kompilera dina mallar varje gång de renderas kan omkostnaderna för detta bli höga.</p>\n<p>Du konfigurerar den cachade mallladdaren med en lista över andra laddare som den ska omsluta. De omslutna laddarna används för att lokalisera okända mallar när de först påträffas. Den cachade laddaren lagrar sedan den kompilerade <code class=\"docutils literal notranslate\">Template</code> i minnet. Den cachade <code class=\"docutils literal notranslate\">Template</code>-instansen returneras för efterföljande förfrågningar om att ladda samma mall.</p>\n<p>Den här laddaren aktiveras automatiskt om <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEMPLATES-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS['loaders']</code></a> inte har angetts.</p>\n<p>Du kan manuellt ange cachning av mallar med vissa anpassade mallladdare med inställningar som denna:</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>BASE_DIR <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.cached.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">[</span>\n                        <span class=\"s2\">&quot;django.template.loaders.filesystem.Loader&quot;</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;django.template.loaders.app_directories.Loader&quot;</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;path.to.custom.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">],</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Alla de inbyggda Django-malltaggarna är säkra att använda med den cachade laddaren, men om du använder anpassade malltaggar som kommer från tredjepartspaket, eller som du skrev själv, bör du se till att <code class=\"docutils literal notranslate\">Node</code>-implementeringen för varje tagg är trådsäker. För mer information, se <a class=\"reference internal\" href=\"/sv/5.2/howto/custom-template-tags/#template-tag-thread-safety\"><span class=\"std std-ref\">överväganden om trådsäkerhet för malltaggar</span></a>.</p>\n</aside>\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.template.loaders.locmem.Loader</code></p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.locmem.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">locmem.</span><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.locmem.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Läser in mallar från en Python-ordbok. Detta är användbart för testning.</p>\n<p>Denna laddare tar en ordlista med mallar som sitt första argument:</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;loaders&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;django.template.loaders.locmem.Loader&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;content here&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">},</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Denna laddare är avaktiverad som standard.</p>\n</dd></dl>\n\n<p>Django använder mallladdarna i ordning enligt alternativet <code class=\"docutils literal notranslate\">'loaders</code>. Den använder varje laddare tills en laddare hittar en matchning.</p>\n</section>\n</section>\n<section id=\"custom-loaders\">\n<span id=\"custom-template-loaders\"></span><h2>Anpassade lastare<a class=\"heading-anchor\" href=\"#custom-loaders\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det är möjligt att ladda mallar från ytterligare källor med hjälp av anpassade mallladdare. Anpassade <code class=\"docutils literal notranslate\">Loader</code>-klasser bör ärva från <code class=\"docutils literal notranslate\">django.template.loaders.base.Loader</code> och definiera metoderna <code class=\"docutils literal notranslate\">get_contents()</code> och <code class=\"docutils literal notranslate\">get_template_sources()</code>.</p>\n<section id=\"loader-methods\">\n<h3>Metoder för lastare<a class=\"heading-anchor\" href=\"#loader-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Loader</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Läser in mallar från en viss källa, t.ex. filsystemet eller en databas.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_template_sources\">\n<span class=\"sig-name descname\">get_template_sources</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_template_sources\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En metod som tar ett <code class=\"docutils literal notranslate\">template_name</code> och ger <a class=\"reference internal\" href=\"#django.template.base.Origin\" title=\"django.template.base.Origin\"><code class=\"xref py py-class docutils literal notranslate\">Origin</code></a>-instanser för varje möjlig källa.</p>\n<p>Filsystemladdaren kan till exempel ta emot <code class=\"docutils literal notranslate\">'index.html</code> som ett <code class=\"docutils literal notranslate\">template_name</code>-argument.  Denna metod skulle ge ursprung för den fullständiga sökvägen till <code class=\"docutils literal notranslate\">index.html</code> som den visas i varje mallkatalog som laddaren tittar på.</p>\n<p>Metoden behöver inte verifiera att mallen finns på en given sökväg, men den bör säkerställa att sökvägen är giltig. Filsystemladdaren ser t.ex. till att sökvägen ligger under en giltig mallkatalog.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_contents\">\n<span class=\"sig-name descname\">get_contents</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">origin</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_contents\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar innehållet för en mall som ges en <a class=\"reference internal\" href=\"#django.template.base.Origin\" title=\"django.template.base.Origin\"><code class=\"xref py py-class docutils literal notranslate\">Origin</code></a>-instans.</p>\n<p>Det är här en filsystemladdare skulle läsa innehåll från filsystemet, eller en databasladdare skulle läsa från databasen. Om en matchande mall inte finns, bör detta ge upphov till ett <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TemplateDoesNotExist</code></a>-fel.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.template.loaders.base.Loader.get_template\">\n<span class=\"sig-name descname\">get_template</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name</em>, <em class=\"sig-param\">skip<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.loaders.base.Loader.get_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar ett <code class=\"docutils literal notranslate\">Template</code>-objekt för ett givet <code class=\"docutils literal notranslate\">template_name</code> genom att loopa genom resultaten från <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_template_sources\" title=\"django.template.loaders.base.Loader.get_template_sources\"><code class=\"xref py py-meth docutils literal notranslate\">get_template_sources()</code></a> och anropa <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_contents\" title=\"django.template.loaders.base.Loader.get_contents\"><code class=\"xref py py-meth docutils literal notranslate\">get_contents()</code></a>. Detta returnerar den första matchande mallen. Om ingen mall hittas, <a class=\"reference internal\" href=\"/sv/5.2/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">TemplateDoesNotExist</code></a> tas upp.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">skip</code> är en lista över ursprung som ska ignoreras när mallar utökas. Detta gör det möjligt för mallar att utöka andra mallar med samma namn. Det används också för att undvika rekursionsfel.</p>\n<p>I allmänhet räcker det med att definiera <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_template_sources\" title=\"django.template.loaders.base.Loader.get_template_sources\"><code class=\"xref py py-meth docutils literal notranslate\">get_template_sources()</code></a> och <a class=\"reference internal\" href=\"#django.template.loaders.base.Loader.get_contents\" title=\"django.template.loaders.base.Loader.get_contents\"><code class=\"xref py py-meth docutils literal notranslate\">get_contents()</code></a> för anpassade mallladdare. <code class=\"docutils literal notranslate\">get_template()</code> behöver vanligtvis inte åsidosättas.</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition-building-your-own admonition\" role=\"note\">\n<p class=\"admonition-title\">Bygg din egen</p>\n<p>För exempel, läs <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.2.x/django/template/loaders\">källkod för Djangos inbyggda laddare</a>.</p>\n</aside>\n</section>\n</section>\n<section id=\"template-origin\">\n<h2>Mall för ursprung<a class=\"heading-anchor\" href=\"#template-origin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mallar har ett <code class=\"docutils literal notranslate\">origin</code> som innehåller attribut beroende på vilken källa de laddas från.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Origin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">loader<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.name\">\n<span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Sökvägen till mallen som returneras av mallladdaren. För laddare som läser från filsystemet är detta den fullständiga sökvägen till mallen.</p>\n<p>Om mallen instansieras direkt i stället för via en mallladdare är detta ett strängvärde av <code class=\"docutils literal notranslate\">&lt;unknown_source&gt;</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den relativa sökvägen till mallen som skickas till mallladdaren.</p>\n<p>Om mallen instansieras direkt i stället för via en mallladdare är detta <code class=\"docutils literal notranslate\">None</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.template.base.Origin.loader\">\n<span class=\"sig-name descname\">loader</span><a class=\"heading-anchor\" href=\"#django.template.base.Origin.loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den instans av mallladdaren som skapade denna <code class=\"docutils literal notranslate\">Origin</code>.</p>\n<p>Om mallen instansieras direkt i stället för via en mallladdare är detta <code class=\"docutils literal notranslate\">None</code>.</p>\n<p><a class=\"reference internal\" href=\"#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\">django.template.loaders.cached.Loader</code></a> kräver att alla dess omslutna laddare ställer in detta attribut, vanligtvis genom att instansiera <code class=\"docutils literal notranslate\">Origin</code> med <code class=\"docutils literal notranslate\">loader=self</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>","rootId":"the-django-template-language-for-python-programmers","toc":[{"title":"Översikt","anchor":"overview","children":[]},{"title":"Konfigurera en motor","anchor":"configuring-an-engine","children":[]},{"title":"Ladda en mall","anchor":"loading-a-template","children":[]},{"title":"Rendering av en kontext","anchor":"rendering-a-context","children":[{"title":"Variabler och uppslagsord","anchor":"variables-and-lookups","children":[]},{"title":"Hur ogiltiga variabler hanteras","anchor":"how-invalid-variables-are-handled","children":[]},{"title":"Inbyggda variabler","anchor":"built-in-variables","children":[]},{"title":"Begränsningar med stränglitteraler","anchor":"limitations-with-string-literals","children":[]}]},{"title":"Leka med Context-objekt","anchor":"playing-with-context-objects","children":[{"title":"Använda RequestContext","anchor":"using-requestcontext","children":[]},{"title":"Inbyggda processorer för mallkontext","anchor":"built-in-template-context-processors","children":[{"title":"django.contrib.auth.context_processors.auth","anchor":"django-contrib-auth-context-processors-auth","children":[]},{"title":"django.template.context_processors.debug","anchor":"django-template-context-processors-debug","children":[]},{"title":"django.template.context_processors.i18n","anchor":"django-template-context-processors-i18n","children":[]},{"title":"django.template.context_processors.media","anchor":"django-template-context-processors-media","children":[]},{"title":"django.template.context_processors.static","anchor":"django-template-context-processors-static","children":[]},{"title":"django.template.context_processors.csrf","anchor":"django-template-context-processors-csrf","children":[]},{"title":"django.template.context_processors.request","anchor":"django-template-context-processors-request","children":[]},{"title":"django.template.context_processors.tz","anchor":"django-template-context-processors-tz","children":[]},{"title":"django.contrib.messages.context_processors.messages","anchor":"django-contrib-messages-context-processors-messages","children":[]}]},{"title":"Skriva dina egna kontextprocessorer","anchor":"writing-your-own-context-processors","children":[]}]},{"title":"Laddning av mallar","anchor":"loading-templates","children":[{"title":"Alternativet DIRS","anchor":"the-dirs-option","children":[]},{"title":"Typer av lastare","anchor":"loader-types","children":[]}]},{"title":"Anpassade lastare","anchor":"custom-loaders","children":[{"title":"Metoder för lastare","anchor":"loader-methods","children":[]}]},{"title":"Mall för ursprung","anchor":"template-origin","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/5.2/ref/"},{"docname":"ref/templates/index","title":"Mallar","url":"/sv/5.2/ref/templates/"}],"prev":{"docname":"ref/templates/builtins","title":"Inbyggda malltaggar och filter","url":"/sv/5.2/ref/templates/builtins/"},"next":{"docname":"ref/template-response","title":"TemplateResponse och SimpleTemplateResponse","url":"/sv/5.2/ref/template-response/"},"formats":{"html":"/sv/5.2/ref/templates/api/","markdown":"/sv/5.2/ref/templates/api.md","json":"/sv/5.2/ref/templates/api.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/templates/api.txt","official":"https://docs.djangoproject.com/sv/5.2/ref/templates/api/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}