Hur man hanterar statiska filer (t.ex. bilder, JavaScript, CSS)Link to this heading

Websites generally need to serve additional files such as images, JavaScript, or CSS. In Django, we refer to these files as ”static files”. Django provides django.contrib.staticfiles to help you manage them.

På den här sidan beskrivs hur du kan servera dessa statiska filer.

Konfigurera statiska filerLink to this heading

  1. Se till att django.contrib.staticfiles ingår i din INSTALLED_APPS.

  2. I din inställningsfil definierar du STATIC_URL, till exempel:

    Code
    STATIC_URL = "static/"
    
  3. I dina mallar använder du malltaggen static för att bygga URL:en för den angivna relativa sökvägen med hjälp av det konfigurerade aliaset staticfiles STORAGES.

    Django template
    {% load static %}
    <img src="{% static 'my_app/example.jpg' %}" alt="My image">
    
  4. Lagra dina statiska filer i en mapp som heter static i din app. Till exempel my_app/static/my_app/example.jpg.

Ditt projekt kommer förmodligen också att ha statiska tillgångar som inte är knutna till en viss app. Förutom att använda en static/-katalog i dina appar kan du definiera en lista över kataloger (STATICFILES_DIRS) i din inställningsfil där Django också kommer att leta efter statiska filer. Till exempel:

Code
STATICFILES_DIRS = [
    BASE_DIR / "static",
    "/var/www/static/",
]

Se dokumentationen för inställningen STATICFILES_FINDERS för mer information om hur staticfiles hittar dina filer.

Servering av statiska filer under utvecklingLink to this heading

Om du använder django.contrib.staticfiles enligt förklaringen ovan kommer runserver att göra detta automatiskt när DEBUG är inställd på True. Om du inte har django.contrib.staticfiles i INSTALLED_APPS kan du fortfarande manuellt servera statiska filer med hjälp av vyn django.views.static.serve().

Detta är inte lämpligt för produktionsanvändning! För några vanliga distributionsstrategier, se Så här distribuerar du statiska filer.

Till exempel, om din STATIC_URL är definierad som static/, kan du göra detta genom att lägga till följande snutt i din urls.py:

Code
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Servering av filer som laddats upp av en användare under utvecklingenLink to this heading

Under utvecklingen kan du servera användaruppladdade mediefiler från MEDIA_ROOT med hjälp av vyn django.views.static.serve().

Detta är inte lämpligt för produktionsanvändning! För några vanliga distributionsstrategier, se Så här distribuerar du statiska filer.

Om till exempel din MEDIA_URL är definierad som media/, kan du göra detta genom att lägga till följande snutt i din ROOT_URLCONF:

Code
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

TestarLink to this heading

När du kör tester som använder faktiska HTTP-förfrågningar istället för den inbyggda testklienten (dvs. när du använder den inbyggda LiveServerTestCase) måste de statiska tillgångarna serveras tillsammans med resten av innehållet så att testmiljön återger den verkliga så troget som möjligt, men LiveServerTestCase har endast mycket grundläggande funktionalitet för servering av statiska filer: Det känner inte till sökfunktionen i applikationen staticfiles och förutsätter att det statiska innehållet redan har samlats under STATIC_ROOT.

På grund av detta levererar staticfiles sin egen django.contrib.staticfiles.testing.StaticLiveServerTestCase, en underklass av den inbyggda som har förmågan att transparent servera alla tillgångar under körning av dessa tester på ett sätt som liknar det vi får vid utvecklingstid med DEBUG = True, dvs. utan att behöva samla in dem med collectstatic först.

UtplaceringLink to this heading

django.contrib.staticfiles tillhandahåller ett bekvämt hanteringskommando för att samla statiska filer i en enda katalog så att du enkelt kan servera dem.

  1. Ställ in STATIC_ROOT till den katalog från vilken du vill servera dessa filer, till exempel:

    Code
    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. Kör kommandot collectstatic management:

    Shell
    $ python manage.py collectstatic
    

    Detta kommer att kopiera alla filer från dina statiska mappar till STATIC_ROOT-katalogen.

  3. Använd en valfri webbserver för att visa filerna. Så här distribuerar du statiska filer beskriver några vanliga distributionsstrategier för statiska filer.

Läs merLink to this heading

Detta dokument har täckt grunderna och några vanliga användningsmönster. För fullständiga detaljer om alla inställningar, kommandon, malltaggar och andra delar som ingår i django.contrib.staticfiles, se the staticfiles reference.