{"title":"Django i korthet","version":"6.0","locale":"sv","docname":"intro/overview","url":"/sv/6.0/intro/overview/","canonical":"https://djangodocs.dev/sv/6.0/intro/overview/","summary":"Eftersom Django utvecklades i en snabb nyhetsrumsmiljö, utformades det för att göra vanliga webbutvecklingsuppgifter snabba och enkla.","html":"<h1>Django i korthet<a class=\"heading-anchor\" href=\"#django-at-a-glance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Eftersom Django utvecklades i en snabb nyhetsrumsmiljö, utformades det för att göra vanliga webbutvecklingsuppgifter snabba och enkla. Här är en informell översikt över hur man skriver en databasdriven webbapp med Django.</p>\n<p>Målet med detta dokument är att ge dig tillräckligt med tekniska detaljer för att förstå hur Django fungerar, men det är inte avsett att vara en handledning eller referens - men vi har båda! När du är redo att starta ett projekt kan du <a class=\"reference internal\" href=\"/sv/6.0/intro/tutorial01/\"><span class=\"doc\">börja med handledningen</span></a> eller <a class=\"reference internal\" href=\"/sv/6.0/topics/\"><span class=\"doc\">dyka rakt in i mer detaljerad dokumentation</span></a>.</p>\n<section id=\"design-your-model\">\n<h2>Utforma din modell<a class=\"heading-anchor\" href=\"#design-your-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Även om du kan använda Django utan en databas, levereras den med en ”objekt-relationell mappare” där du beskriver din databaslayout i Python-kod.</p>\n<p>Syntaxen <a class=\"reference internal\" href=\"/sv/6.0/topics/db/models/\"><span class=\"doc\">datamodell</span></a> erbjuder många olika sätt att representera dina modeller - hittills har den löst många års problem med databasscheman. Här är ett snabbt exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/modeller.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Reporter</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    full_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">70</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>full_name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    pub_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    headline <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    content <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    reporter <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Reporter<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>headline\n</code></pre></figure>\n</section>\n<section id=\"install-it\">\n<h2>Installera den<a class=\"heading-anchor\" href=\"#install-it\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Därefter kör du Djangos kommandoradsverktyg för att skapa databastabellerna automatiskt:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py makemigrations\n<span class=\"gp\">$ </span>python manage.py migrate\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py makemigrations\n<span class=\"gp\">...\\&gt;</span> py manage.py migrate\n</code></pre></div></div></div>\n<p>Kommandot <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> tittar på alla dina tillgängliga modeller och skapar migreringar för de tabeller som inte redan finns. <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> kör migreringarna och skapar tabeller i din databas, samt ger eventuellt <a class=\"reference internal\" href=\"/sv/6.0/topics/migrations/\"><span class=\"doc\">mycket rikare schemakontroll</span></a>.</p>\n</section>\n<section id=\"enjoy-the-free-api\">\n<h2>Njut av det kostnadsfria API:et<a class=\"heading-anchor\" href=\"#enjoy-the-free-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Med det har du ett gratis och rikt <a class=\"reference internal\" href=\"/sv/6.0/topics/db/queries/\"><span class=\"doc\">Python API</span></a> för att komma åt dina data. API:et skapas i farten, ingen kodgenerering är nödvändig:</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=\"go\"># Import the models we created from our &quot;news&quot; app</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">news.models</span> <span class=\"kn\">import</span> Article<span class=\"p\">,</span> Reporter\n\n<span class=\"go\"># No reporters are in the system yet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n\n<span class=\"go\"># Create a new Reporter.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r <span class=\"o\">=</span> Reporter<span class=\"p\">(</span>full_name<span class=\"o\">=</span><span class=\"s2\">&quot;John Smith&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Save the object into the database. You have to call save() explicitly.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"go\"># Now it has an ID.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>id\n<span class=\"go\">1</span>\n\n<span class=\"go\"># Now the new reporter is in the database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n\n<span class=\"go\"># Fields are represented as attributes on the Python object.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>full_name\n<span class=\"go\">&#39;John Smith&#39;</span>\n\n<span class=\"go\"># Django provides a rich database lookup API.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>full_name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>full_name__contains<span class=\"o\">=</span><span class=\"s2\">&quot;mith&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n    <span class=\"o\">...</span>\n<span class=\"gr\">DoesNotExist</span>: Reporter matching query does not exist.\n\n<span class=\"x\"># Create an article.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date\n<span class=\"gp\">&gt;&gt;&gt; </span>a <span class=\"o\">=</span> Article<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    pub_date<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">(),</span> headline<span class=\"o\">=</span><span class=\"s2\">&quot;Django is cool&quot;</span><span class=\"p\">,</span> content<span class=\"o\">=</span><span class=\"s2\">&quot;Yeah.&quot;</span><span class=\"p\">,</span> reporter<span class=\"o\">=</span>r\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>a<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"go\"># Now the article is in the database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># Article objects get API access to related Reporter objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r <span class=\"o\">=</span> a<span class=\"o\">.</span>reporter\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>full_name\n<span class=\"go\">&#39;John Smith&#39;</span>\n\n<span class=\"go\"># And vice versa: Reporter objects get API access to Article objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>article_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># The API follows relationships as far as you need, performing efficient</span>\n<span class=\"go\"># JOINs for you behind the scenes.</span>\n<span class=\"go\"># This finds all articles by a reporter whose name starts with &quot;John&quot;.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>reporter__full_name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># Change an object by altering its attributes and calling save().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>full_name <span class=\"o\">=</span> <span class=\"s2\">&quot;Billy Goat&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n<span class=\"go\"># Delete an object with delete().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\">\n<h2>Ett dynamiskt administratörsgränssnitt: det är inte bara en byggnadsställning - det är hela huset<a class=\"heading-anchor\" href=\"#a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När dina modeller är definierade kan Django automatiskt skapa ett professionellt, produktionsfärdigt <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/admin/\"><span class=\"doc\">administrativt gränssnitt</span></a> - en webbplats som låter autentiserade användare lägga till, ändra och ta bort objekt. Det enda steget som krävs är att registrera din modell på administratörssidan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/modeller.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    pub_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    headline <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    content <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    reporter <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Reporter<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> models\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>models<span class=\"o\">.</span>Article<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Filosofin här är att din webbplats redigeras av en personal, en kund eller kanske bara du - och du vill inte behöva ta itu med att skapa backend-gränssnitt bara för att hantera innehåll.</p>\n<p>Ett typiskt arbetsflöde för att skapa Django-appar är att skapa modeller och få igång administratörswebbplatserna så snabbt som möjligt, så att din personal (eller kunder) kan börja fylla i data. Utveckla sedan det sätt på vilket data presenteras för allmänheten.</p>\n</section>\n<section id=\"design-your-urls\">\n<h2>Utforma dina webbadresser<a class=\"heading-anchor\" href=\"#design-your-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ett rent och elegant URL-schema är en viktig detalj i en högkvalitativ webbapplikation. Django uppmuntrar till vacker URL-design och lägger inte till något skräp i webbadresser, som <code class=\"docutils literal notranslate\">.php</code> eller <code class=\"docutils literal notranslate\">.asp</code>.</p>\n<p>För att designa webbadresser för en app skapar du en Python-modul som kallas <a class=\"reference internal\" href=\"/sv/6.0/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>. Den är en innehållsförteckning för din app och innehåller en mappning mellan URL-mönster och Python callback-funktioner. URLconfs tjänar också till att frikoppla webbadresser från Python-kod.</p>\n<p>Så här kan en URLconf se ut för exemplet <code class=\"docutils literal notranslate\">Reporter</code>/<code class=\"docutils literal notranslate\">Article</code> ovan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>year_archive<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>month_archive<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>article_detail<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Koden ovan mappar URL-sökvägar till Python callback-funktioner (”views”). Söksträngarna använder parametertaggar för att ”fånga” värden från webbadresserna. När en användare begär en sida kör Django igenom varje sökväg, i ordning, och stannar vid den första som matchar den begärda webbadressen. (Om ingen av dem matchar anropar Django en 404-vy i specialfall.) Detta går blixtsnabbt, eftersom sökvägarna sammanställs till reguljära uttryck vid laddningstiden.</p>\n<p>När ett av URL-mönstren matchar anropar Django den givna vyn, som är en Python-funktion. Varje vy får ett request-objekt - som innehåller metadata för begäran - och de värden som fångats i mönstret.</p>\n<p>Om en användare till exempel begärde URL:en ”/articles/2005/05/39323/”, skulle Django anropa funktionen <code class=\"docutils literal notranslate\">news.views.article_detail(request, year=2005, month=5, pk=39323)</code>.</p>\n</section>\n<section id=\"write-your-views\">\n<h2>Skriv dina synpunkter<a class=\"heading-anchor\" href=\"#write-your-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Varje vy är ansvarig för att göra en av två saker: Returnera ett <a class=\"reference internal\" href=\"/sv/6.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a>-objekt som innehåller innehållet för den begärda sidan, eller skapa ett undantag som <a class=\"reference internal\" href=\"/sv/6.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\">Http404</code></a>. Resten är upp till dig.</p>\n<p>I allmänhet hämtar en vy data enligt parametrarna, laddar en mall och renderar mallen med de hämtade data. Här är ett exempel på en vy för <code class=\"docutils literal notranslate\">year_archive</code> från ovan:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/views.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Article\n\n\n<span class=\"k\">def</span> <span class=\"nf\">year_archive</span><span class=\"p\">(</span>request<span class=\"p\">,</span> year<span class=\"p\">):</span>\n    a_list <span class=\"o\">=</span> Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span>year<span class=\"p\">)</span>\n    context <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;year&quot;</span><span class=\"p\">:</span> year<span class=\"p\">,</span> <span class=\"s2\">&quot;article_list&quot;</span><span class=\"p\">:</span> a_list<span class=\"p\">}</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;news/year_archive.html&quot;</span><span class=\"p\">,</span> context<span class=\"p\">)</span>\n</code></pre></figure>\n<p>I det här exemplet används Djangos <a class=\"reference internal\" href=\"/sv/6.0/topics/templates/\"><span class=\"doc\">mallsystem</span></a>, som har flera kraftfulla funktioner men strävar efter att vara tillräckligt enkelt för att icke-programmerare ska kunna använda det.</p>\n</section>\n<section id=\"design-your-templates\">\n<h2>Utforma dina mallar<a class=\"heading-anchor\" href=\"#design-your-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Koden ovan laddar mallen <code class=\"docutils literal notranslate\">news/year_archive.html</code>.</p>\n<p>Django har en sökväg för mallar, vilket gör att du kan minimera redundans bland mallar. I dina Django-inställningar anger du en lista över kataloger som ska kontrolleras efter mallar med <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a>. Om en mall inte finns i den första katalogen, kontrolleras den andra och så vidare.</p>\n<p>Låt oss säga att mallen <code class=\"docutils literal notranslate\">news/year_archive.html</code> hittades. Så här kan det se ut:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">nyheter/templates/nyheter/year_archive.html</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">article</span> <span class=\"k\">in</span> <span class=\"nv\">article_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">article.headline</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>By <span class=\"cp\">{{</span> <span class=\"nv\">article.reporter.full_name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Published <span class=\"cp\">{{</span> <span class=\"nv\">article.pub_date</span><span class=\"o\">|</span><span class=\"nf\">date</span><span class=\"s2\">:&quot;F j, Y&quot;</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>Variablerna omges av dubbla hakparenteser. <code class=\"docutils literal notranslate\">{{ article.headline }}</code> betyder ”Skriv ut värdet för artikelns rubrikattribut.” Men prickar används inte bara för attributuppslagning. De kan också användas för uppslagning av ordboksnycklar, indexuppslagning och funktionsanrop.</p>\n<p>Observera att <code class=\"docutils literal notranslate\">{{ article.pub_date|date:&quot;F j, Y&quot; }}</code> använder en Unix-liknande ”pipe” (tecknet ”|”). Det här kallas ett mallfilter och är ett sätt att filtrera värdet på en variabel. I det här fallet formaterar datumfiltret ett Python datetime-objekt i det angivna formatet (som finns i PHP:s datumfunktion).</p>\n<p>Du kan kedja ihop så många filter som du vill. Du kan skriva <a class=\"reference internal\" href=\"/sv/6.0/howto/custom-template-tags/#howto-writing-custom-template-filters\"><span class=\"std std-ref\">custom template filters</span></a>. Du kan skriva <a class=\"reference internal\" href=\"/sv/6.0/howto/custom-template-tags/\"><span class=\"doc\">custom template tags</span></a>, som kör anpassad Python-kod bakom kulisserna.</p>\n<p>Slutligen använder Django konceptet ”template inheritance”. Det är vad <code class=\"docutils literal notranslate\">{% extends &quot;base.html&quot; %}</code> gör. Det betyder ”Ladda först mallen som heter ’base’, som har definierat ett gäng block, och fyll blocken med följande block.” Kort sagt, det gör att du dramatiskt kan minska redundansen i mallar: varje mall behöver bara definiera det som är unikt för den mallen.</p>\n<p>Så här kan mallen ”base.html” se ut, inklusive användningen av <a class=\"reference internal\" href=\"/sv/6.0/howto/static-files/\"><span class=\"doc\">statiska filer</span></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">mallar/base.html</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s1\">&#39;images/sitelogo.png&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;Logo&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Förenklat definierar den webbplatsens utseende och känsla (med webbplatsens logotyp) och ger ”hål” som underordnade mallar kan fylla. Detta innebär att en omdesign av webbplatsen kan göras genom att ändra en enda fil - basmallen.</p>\n<p>Det låter dig också skapa flera versioner av en webbplats, med olika basmallar, samtidigt som du återanvänder barnmallar. Djangos skapare har använt denna teknik för att skapa slående olika mobilversioner av webbplatser genom att bara skapa en ny basmall.</p>\n<p>Observera att du inte behöver använda Djangos mallsystem om du föredrar ett annat system. Även om Djangos mallsystem är särskilt väl integrerat med Djangos modellager, finns det inget som tvingar dig att använda det. För den delen behöver du inte heller använda Djangos databas-API. Du kan använda ett annat databasabstraktionslager, du kan läsa XML-filer, du kan läsa filer från disken eller vad du vill. Varje del av Django - modeller, vyer, mallar - är frikopplad från nästa.</p>\n</section>\n<section id=\"this-is-just-the-surface\">\n<h2>Detta är bara ytan<a class=\"heading-anchor\" href=\"#this-is-just-the-surface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Detta har bara varit en snabb översikt över Djangos funktionalitet. Några mer användbara funktioner:</p>\n<ul class=\"simple\">\n<li><p>Ett <a class=\"reference internal\" href=\"/sv/6.0/topics/cache/\"><span class=\"doc\">caching-ramverk</span></a> som integreras med memcached eller andra backends.</p></li>\n<li><p>Ett <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/syndication/\"><span class=\"doc\">syndication-ramverk</span></a> som låter dig skapa RSS- och Atom-flöden genom att skriva en liten Python-klass.</p></li>\n<li><p>Fler attraktiva automatiskt genererade adminfunktioner - den här översikten har knappt skrapat på ytan.</p></li>\n</ul>\n<p>Nästa steg är att du <a class=\"reference external\" href=\"https://www.djangoproject.com/download/\">laddar ner Django</a>, läser <a class=\"reference internal\" href=\"/sv/6.0/intro/tutorial01/\"><span class=\"doc\">handledningen</span></a> och går med i <a class=\"reference external\" href=\"https://www.djangoproject.com/community/\">the community</a>. Tack för ditt intresse!</p>\n</section>","rootId":"django-at-a-glance","toc":[{"title":"Utforma din modell","anchor":"design-your-model","children":[]},{"title":"Installera den","anchor":"install-it","children":[]},{"title":"Njut av det kostnadsfria API:et","anchor":"enjoy-the-free-api","children":[]},{"title":"Ett dynamiskt administratörsgränssnitt: det är inte bara en byggnadsställning - det är hela huset","anchor":"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house","children":[]},{"title":"Utforma dina webbadresser","anchor":"design-your-urls","children":[]},{"title":"Skriv dina synpunkter","anchor":"write-your-views","children":[]},{"title":"Utforma dina mallar","anchor":"design-your-templates","children":[]},{"title":"Detta är bara ytan","anchor":"this-is-just-the-surface","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Kom igång","url":"/sv/6.0/intro/"}],"prev":{"docname":"intro/index","title":"Kom igång","url":"/sv/6.0/intro/"},"next":{"docname":"intro/install","title":"Snabbguide för installation","url":"/sv/6.0/intro/install/"},"formats":{"html":"/sv/6.0/intro/overview/","markdown":"/sv/6.0/intro/overview.md","json":"/sv/6.0/intro/overview.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/intro/overview.txt","official":"https://docs.djangoproject.com/sv/6.0/intro/overview/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}