Skriva din första Django-app, del 6¶
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.
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”.
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.
Det är vad django.contrib.staticfiles
ä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.
Var du kan få hjälp:
Om du har problem med att gå igenom den här handledningen kan du gå till avsnittet Att få hjälp i FAQ.
Anpassa din apps utseende och känsla¶
Först skapar du en katalog som heter static
i din polls
-katalog. Django kommer att leta efter statiska filer där, på samma sätt som Django hittar mallar i polls/templates/
.
Djangos inställning STATICFILES_FINDERS
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 AppDirectoriesFinder
som letar efter en ”statisk” underkatalog i varje INSTALLED_APPS
, som den i polls
som vi just skapade. Admin-webbplatsen använder samma katalogstruktur för sina statiska filer.
I katalogen static
som du just har skapat, skapar du en annan katalog som heter polls
och i den skapar du en fil som heter style.css
. Med andra ord bör din stilmall finnas på polls/static/polls/style.css
. På grund av hur AppDirectoriesFinder
staticfile finder fungerar kan du hänvisa till den här statiska filen i Django som polls/style.css
, på samma sätt som du refererar till sökvägen för mallar.
Namnavstånd för statiska filer
Precis som med mallar skulle vi måhända kunna komma undan med att lägga våra statiska filer direkt i polls/static
(istället för att skapa en annan polls
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 annan 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 namespacing dem. Det vill säga genom att lägga dessa statiska filer i en annan katalog som heter för själva applikationen.
Lägg till följande kod i den stilmallen (polls/static/polls/style.css
):
polls/static/polls/style.css
¶li a {
color: green;
}
Lägg sedan till följande längst upp i polls/templates/polls/index.html
:
polls/templates/polls/index.html
¶{% load static %}
<link rel="stylesheet" href="{% static 'polls/style.css' %}">
Malltaggen {% static %}
genererar den absoluta URL:en för statiska filer.
Det är allt du behöver göra för utveckling.
Starta servern (eller starta om den om den redan är igång):
$ python manage.py runserver
...\> py manage.py runserver
Ladda om http://localhost:8000/polls/
och du bör se att frågelänkarna är gröna (Django-stil!), vilket innebär att din stilmall laddades korrekt.
Lägga till en bakgrundsbild¶
Nu ska vi skapa en underkatalog för bilder. Skapa en underkatalog med namnet images
i katalogen polls/static/polls/
. 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 background.png
, som kommer att ha den fullständiga sökvägen polls/static/polls/images/background.png
.
Lägg sedan till en referens till din bild i din stilmall (polls/static/polls/style.css
):
polls/static/polls/style.css
¶body {
background: white url("images/background.png") no-repeat;
}
Ladda om http://localhost:8000/polls/
och du bör se bakgrunden laddad längst upp till vänster på skärmen.
Varning
Malltaggen {% static %}
ä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 relativa sökvägar för att länka dina statiska filer mellan varandra, eftersom du då kan ändra STATIC_URL
(som används av static
malltaggen för att generera dess webbadresser) utan att behöva ändra en massa sökvägar i dina statiska filer också.
Dessa är de grundläggande. För mer information om inställningar och andra bitar som ingår i ramverket, se the static files howto och the staticfiles reference. Deploying static files diskuterar hur man använder statiska filer på en riktig server.
När du känner dig bekväm med de statiska filerna kan du läsa del 7 av denna handledning för att lära dig hur du anpassar Djangos automatiskt genererade administratörssida.