Come gestire file statici (Es. immagini, 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.
Questa pagina descrive come puoi distribuire questi file statici.
Configurazione file staticiLink to this heading
Assicurati che
django.contrib.staticfilessia inserito inINSTALLED_APPS.Nel tuo file dei settings, definisci
STATIC_URL, per esempio:STATIC_URL = "static/"In your templates, use the
statictemplate tag to build the URL for the given relative path using the configuredstaticfilesSTORAGESalias.{% load static %} <img src="{% static 'my_app/example.jpg' %}" alt="My image">Archivia i tuoi file statici in una cartella chiamata
staticnella tua app. Per esempiomy_app/static/my_app/example.jpg.
Il tuo progetto avrà probabilmente anche asset statici che non sono legati ad una app particolare. Oltre ad usare una directory static/ nelle tue applicazioni, puoi definire una lista di directory (STATICFILES_DIRS) nel tuo file di impostazioni dove Django cercherà ulteriormente i file statici. Per esempio:
STATICFILES_DIRS = [
BASE_DIR / "static",
"/var/www/static/",
]
Consulta la documentazione per la configurazione relativa a STATICFILES_FINDERS per i dettagli su come staticfiles trova i tuoi files.
Servire file statici durante lo sviluppoLink to this heading
Se usi django.contrib.staticfiles come spiegato sopra, runserver lo farà automaticamente se DEBUG è impostato su True. Se non hai django.contrib.staticfiles in INSTALLED_APPS, puoi comunque servire manualmente i file statici usando la vista django.views.static.serve().
Questo non è adatto per un utilizzo in produzione! Per alcune strategie di pubblicazione comuni, guarda Come distribuire file statici.
Per esempio, se la tua impostazione STATIC_URL è definita come static/, puoi fare questo aggiungendo il seguente snippet a urls.py:
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)
Distribuire file caricati da un utente durante lo sviluppoLink to this heading
Durante lo sviluppo, è possibile servire file multimediali caricati dall’utente da:setting:MEDIA_ROOT utilizzando la vista django.views.static.serve().
Questo non è adatto per un utilizzo in produzione! Per alcune strategie di pubblicazione comuni, guarda Come distribuire file statici.
Ad esempio, se il tuo MEDIA_URL è definita come media/, puoi farlo aggiungendo il seguente snippet al tuo:setting:ROOT_URLCONF:
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)
TestingLink to this heading
Quando si eseguono test che utilizzano richieste HTTP effettive invece del client di test integrato (per esempio utilizzando LiveServerTestCase) gli asset statici devono essere serviti insieme al resto del contenuto in modo che l’ambiente di test riproduca quello reale il più fedelmente possibile, ma LiveServerTestCase ha solo funzionalità di servizio di file statici molto basilari: non conosce la funzione di ricerca dell’applicazione staticfiles e presuppone il il contenuto statico sia già stato collezionato in STATIC_ROOT.
A causa di ciò, staticfiles offre la propria django.contrib.staticfiles.testing.StaticLiveServerTestCase, una sottoclasse di quella built-in che ha l’abilità di servire trasparentemente tutti gli asset durante l’esecuzione di questi test in modo molto simile a quello che si ottiene durante lo sviluppo con DEBUG = True, cioè senza doverli collezionare usando prima collectstatic.
DeploymentLink to this heading
django.contrib.staticfiles fornisce un comando di gestione comodo per la raccolta di file statici in un’unica directory in modo da poterli servire facilmente.
Imposta il valore di
STATIC_ROOTalla directory da cui desideri servire questi file, ad esempio:STATIC_ROOT = "/var/www/example.com/static/"Run the
collectstaticmanagement command:$ python manage.py collectstaticQuesto copia tutti i file dalla tua cartella static nella cartella definita in
STATIC_ROOT.Utilizza un web server a tua scelta per distribuire i files. Come distribuire file statici copre alcune delle strategie di distribuzione comuni per i file statici.
Per saperne di piùLink to this heading
Questo documento ha coperto le basi ed alcuni pattern di utilizzo comuni. Per avere dettagli completi su tutte le impostazioni, i comandi, i tag di template ed altri frammenti inclusi in django.contrib.staticfiles, visita la guida di riferimento di staticfiles.