Come gestire file statici (Es. immagini, JavaScript, CSS)Link to this heading

I siti web generalmente necessitano di servire file aggiuntivi come immagini, JavaScript o CSS. In Django, vi facciamo riferimento come «file statici». Django offre django.contrib.staticfiles per aiutarti a gestirli.

Questa pagina descrive come puoi distribuire questi file statici.

Configurazione file staticiLink to this heading

  1. Assicurati che django.contrib.staticfiles sia inserito in INSTALLED_APPS.

  2. Nel tuo file dei settings, definisci STATIC_URL, per esempio:

    Code
    STATIC_URL = "static/"
    
  3. In your templates, use the static template tag to build the URL for the given relative path using the configured staticfiles STORAGES alias.

    Django template
    {% load static %}
    <img src="{% static 'my_app/example.jpg' %}" alt="My image">
    
  4. Archivia i tuoi file statici in una cartella chiamata static nella tua app. Per esempio my_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:

Code
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:

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)

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:

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)

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.

  1. Imposta il valore di STATIC_ROOT alla directory da cui desideri servire questi file, ad esempio:

    Code
    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. Run the collectstatic management command:

    Shell
    $ python manage.py collectstatic
    

    Questo copia tutti i file dalla tua cartella static nella cartella definita in STATIC_ROOT .

  3. 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.