{"title":"Skriva din första Django-app, del 6","version":"5.2","locale":"sv","docname":"intro/tutorial06","url":"/sv/5.2/intro/tutorial06/","canonical":"https://djangodocs.dev/sv/5.2/intro/tutorial06/","summary":"Denna handledning börjar där Tutorial 5 slutade. Vi har byggt en testad applikation för webbenkäter och nu ska vi lägga till en stilmall och en bild.","html":"<h1>Skriva din första Django-app, del 6<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Denna handledning börjar där <a class=\"reference internal\" href=\"/sv/5.2/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a> slutade. Vi har byggt en testad applikation för webbenkäter och nu ska vi lägga till en stilmall och en bild.</p>\n<p>Förutom den HTML som genereras av servern behöver webbapplikationer i allmänhet servera ytterligare filer - till exempel bilder, JavaScript eller CSS - som krävs för att rendera hela webbsidan. I Django hänvisar vi till dessa filer som ”statiska filer”.</p>\n<p>För små projekt är det inte så farligt, eftersom du kan förvara de statiska filerna någonstans där din webbserver kan hitta dem. Men i större projekt - särskilt de som består av flera appar - börjar det bli knepigt att hantera de flera uppsättningar statiska filer som tillhandahålls av varje applikation.</p>\n<p>Det är vad <code class=\"docutils literal notranslate\">django.contrib.staticfiles</code> är till för: det samlar statiska filer från var och en av dina applikationer (och alla andra platser du anger) till en enda plats som enkelt kan serveras i produktion.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Var du kan få hjälp:</p>\n<p>Om du har problem med att gå igenom den här handledningen kan du gå till avsnittet <a class=\"reference internal\" href=\"/sv/5.2/faq/help/\"><span class=\"doc\">Att få hjälp</span></a> i FAQ.</p>\n</aside>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Anpassa din <em>apps</em> utseende och känsla<a class=\"heading-anchor\" href=\"#customize-your-app-s-look-and-feel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Först skapar du en katalog som heter <code class=\"docutils literal notranslate\">static</code> i din <code class=\"docutils literal notranslate\">polls</code>-katalog. Django kommer att leta efter statiska filer där, på samma sätt som Django hittar mallar i <code class=\"docutils literal notranslate\">polls/templates/</code>.</p>\n<p>Djangos inställning <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_FINDERS</code></a> innehåller en lista över sökare som vet hur man upptäcker statiska filer från olika källor. Ett av standardvärdena är <code class=\"docutils literal notranslate\">AppDirectoriesFinder</code> som letar efter en ”statisk” underkatalog i varje <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>, som den i <code class=\"docutils literal notranslate\">polls</code> som vi just skapade. Admin-webbplatsen använder samma katalogstruktur för sina statiska filer.</p>\n<p>I katalogen <code class=\"docutils literal notranslate\">static</code> som du just har skapat, skapar du en annan katalog som heter <code class=\"docutils literal notranslate\">polls</code> och i den skapar du en fil som heter <code class=\"docutils literal notranslate\">style.css</code>. Med andra ord bör din stilmall finnas på <code class=\"docutils literal notranslate\">polls/static/polls/style.css</code>. På grund av hur <code class=\"docutils literal notranslate\">AppDirectoriesFinder</code> staticfile finder fungerar kan du hänvisa till den här statiska filen i Django som <code class=\"docutils literal notranslate\">polls/style.css</code>, på samma sätt som du refererar till sökvägen för mallar.</p>\n<aside class=\"admonition-static-file-namespacing admonition\" role=\"note\">\n<p class=\"admonition-title\">Namnavstånd för statiska filer</p>\n<p>Precis som med mallar skulle vi <em>måhända</em> kunna komma undan med att lägga våra statiska filer direkt i <code class=\"docutils literal notranslate\">polls/static</code> (istället för att skapa en annan <code class=\"docutils literal notranslate\">polls</code> underkatalog), men det skulle faktiskt vara en dålig idé. Django kommer att välja den första statiska filen den hittar vars namn matchar, och om du hade en statisk fil med samma namn i en <em>annan</em> applikation skulle Django inte kunna skilja mellan dem. Vi måste kunna peka Django på den rätta, och det bästa sättet att säkerställa detta är genom att <em>namespacing</em> dem. Det vill säga genom att lägga dessa statiska filer i <em>en annan</em> katalog som heter för själva applikationen.</p>\n</aside>\n<p>Lägg till följande kod i den stilmallen (<code class=\"docutils literal notranslate\">polls/static/polls/style.css</code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/static/polls/style.css</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</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=\"Css code\"><code><span class=\"nt\">li</span> <span class=\"nt\">a</span> <span class=\"p\">{</span>\n    <span class=\"k\">color</span><span class=\"p\">:</span> <span class=\"kc\">green</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Lägg sedan till följande längst upp i <code class=\"docutils literal notranslate\">polls/templates/polls/index.html</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/templates/polls/index.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\n<span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s1\">&#39;polls/style.css&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Malltaggen <code class=\"docutils literal notranslate\">{% static %}</code> genererar den absoluta URL:en för statiska filer.</p>\n<p>Det är allt du behöver göra för utveckling.</p>\n<p>Starta servern (eller starta om den om den redan är igång):</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 runserver\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 runserver\n</code></pre></div></div></div>\n<p>Ladda om <code class=\"docutils literal notranslate\">http://localhost:8000/polls/</code> och du bör se att frågelänkarna är gröna (Django-stil!), vilket innebär att din stilmall laddades korrekt.</p>\n</section>\n<section id=\"adding-a-background-image\">\n<h2>Lägga till en bakgrundsbild<a class=\"heading-anchor\" href=\"#adding-a-background-image\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nu ska vi skapa en underkatalog för bilder. Skapa en underkatalog med namnet <code class=\"docutils literal notranslate\">images</code> i katalogen <code class=\"docutils literal notranslate\">polls/static/polls/</code>. I den här katalogen lägger du till alla bildfiler som du vill använda som bakgrund. I den här handledningen använder vi en fil med namnet <code class=\"docutils literal notranslate\">background.png</code>, som kommer att ha den fullständiga sökvägen <code class=\"docutils literal notranslate\">polls/static/polls/images/background.png</code>.</p>\n<p>Lägg sedan till en referens till din bild i din stilmall (<code class=\"docutils literal notranslate\">polls/static/polls/style.css</code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/static/polls/style.css</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</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=\"Css code\"><code><span class=\"nt\">body</span> <span class=\"p\">{</span>\n    <span class=\"k\">background</span><span class=\"p\">:</span> <span class=\"kc\">white</span> <span class=\"nb\">url</span><span class=\"p\">(</span><span class=\"s2\">&quot;images/background.png&quot;</span><span class=\"p\">)</span> <span class=\"kc\">no-repeat</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Ladda om <code class=\"docutils literal notranslate\">http://localhost:8000/polls/</code> och du bör se bakgrunden laddad längst upp till vänster på skärmen.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Malltaggen <code class=\"docutils literal notranslate\">{% static %}</code> är inte tillgänglig för användning i statiska filer som inte genereras av Django, som din stilmall. Du bör alltid använda <strong>relativa sökvägar</strong> för att länka dina statiska filer mellan varandra, eftersom du då kan ändra <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> (som används av <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\">static</code></a> malltaggen för att generera dess webbadresser) utan att behöva ändra en massa sökvägar i dina statiska filer också.</p>\n</aside>\n<p>Dessa är de <strong>grundläggande</strong>. För mer information om inställningar och andra bitar som ingår i ramverket, se <a class=\"reference internal\" href=\"/sv/5.2/howto/static-files/\"><span class=\"doc\">the static files howto</span></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/staticfiles/\"><span class=\"doc\">the staticfiles reference</span></a>. <a class=\"reference internal\" href=\"/sv/5.2/howto/static-files/deployment/\"><span class=\"doc\">Deploying static files</span></a> diskuterar hur man använder statiska filer på en riktig server.</p>\n<p>När du känner dig bekväm med de statiska filerna kan du läsa <a class=\"reference internal\" href=\"/sv/5.2/intro/tutorial07/\"><span class=\"doc\">del 7 av denna handledning</span></a> för att lära dig hur du anpassar Djangos automatiskt genererade administratörssida.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Anpassa din apps utseende och känsla","anchor":"customize-your-app-s-look-and-feel","children":[]},{"title":"Lägga till en bakgrundsbild","anchor":"adding-a-background-image","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Kom igång","url":"/sv/5.2/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Skriva din första Django-app, del 5","url":"/sv/5.2/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Skriva din första Django-app, del 7","url":"/sv/5.2/intro/tutorial07/"},"formats":{"html":"/sv/5.2/intro/tutorial06/","markdown":"/sv/5.2/intro/tutorial06.md","json":"/sv/5.2/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/sv/5.2/intro/tutorial06/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}