00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

File Statici

I file statici in Django sono tutti quei file che non cambiano dinamicamente: fogli di stile CSS, script JavaScript, immagini, font e altri asset. Django fornisce un sistema completo per gestirli sia in sviluppo che in produzione.

Configurazione in settings.py

Le impostazioni principali per i file statici si trovano in settings.py:

# settings.py
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# URL pubblica per accedere ai file statici
STATIC_URL = '/static/'

# Directory aggiuntive dove Django cerca file statici
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]

# Directory dove collectstatic raccoglie tutti i file per la produzione
STATIC_ROOT = BASE_DIR / 'staticfiles'
  • STATIC_URL: il prefisso URL usato per servire i file statici (es. /static/css/stile.css).
  • STATICFILES_DIRS: lista di directory aggiuntive in cui Django cerca file statici durante lo sviluppo.
  • STATIC_ROOT: la directory di destinazione dove collectstatic copia tutti i file per il deployment in produzione.

Struttura delle Cartelle

Puoi organizzare i file statici a livello di progetto o di singola app:

# A livello di progetto (in STATICFILES_DIRS)
# static/
#     css/
#         stile.css
#     js/
#         script.js
#     img/
#         logo.png

# A livello di app (con APP_DIRS attivo)
# myapp/
#     static/
#         myapp/
#             css/
#                 stile.css

Per le app, si usa una sottocartella con il nome dell’app per evitare conflitti di nomi tra app diverse.

Il Tag {% static %}

Per collegare i file statici nei template, usa il tag {% static %}:

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="{% static 'css/stile.css' %}">
</head>
<body>
    <img src="{% static 'img/logo.png' %}" alt="Logo">
    <script src="{% static 'js/script.js' %}"></script>
</body>
</html>

Il tag {% load static %} deve essere presente in ogni template che utilizza {% static %}. Non viene ereditato automaticamente dai template base.

Servire File Statici in Sviluppo

Durante lo sviluppo, Django serve automaticamente i file statici se DEBUG = True e django.contrib.staticfiles e presente in INSTALLED_APPS:

# settings.py
INSTALLED_APPS = [
    'django.contrib.staticfiles',
    # ... altre app
]

DEBUG = True

Non serve aggiungere nulla a urls.py quando usi runserver con DEBUG = True.

Il Comando collectstatic

Per la produzione, devi raccogliere tutti i file statici in una singola directory con il comando collectstatic:

python manage.py collectstatic

Questo comando copia tutti i file statici da ogni app e da STATICFILES_DIRS nella directory STATIC_ROOT. In produzione, il server web (Nginx, Apache) servira i file da questa cartella.

Usare File Statici nei File CSS

Per referenziare immagini o font all’interno dei file CSS, usa percorsi relativi:

/* static/css/stile.css */
body {
    background-image: url('../img/sfondo.jpg');
}

@font-face {
    font-family: 'MioFont';
    src: url('../fonts/miofont.woff2') format('woff2');
}

Configurazione per la Produzione

In produzione con Django 5.x, puoi usare ManifestStaticFilesStorage per aggiungere hash ai nomi dei file e migliorare il caching:

# settings.py (produzione)
STORAGES = {
    'staticfiles': {
        'BACKEND': 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage',
    },
}

Conclusione

Il sistema di file statici di Django semplifica la gestione degli asset del progetto. Con la configurazione corretta di STATIC_URL, STATICFILES_DIRS e STATIC_ROOT, il tag {% static %} nei template e il comando collectstatic per la produzione, hai tutto il necessario per gestire CSS, JavaScript e immagini in modo efficiente e organizzato.