Django è un popolare framework per applicazioni web scritto in Python. È noto per la sua facilità d’uso e per essere molto versatile. Quando si lavora con Django, è importante saper gestire correttamente i file statici. Questi possono includere immagini, JavaScript e CSS utilizzati nel tuo progetto. Django fornisce un sistema di gestione dei file statici (SFM) per aiutare con questo.
Il modo migliore per gestire i file statici in Django è utilizzare la funzionalità dei file statici fornita dal framework stesso. Django ha un’app integrata, chiamata `django.contrib.staticfiles`, che raccoglie i file statici da ogni applicazione (e qualsiasi altro posto che si definisce) in una posizione che può essere servita.
Seguendo le best practices, i file statici di ogni applicazione Django dovrebbero essere posti in una sottodirectory `static/` di ogni applicazione. Quando `django.contrib.staticfiles` raccoglie i file statici con la sua funzione di raccolta, cerca in tutti questi luoghi e duplica i file trovati in una singola posizione che si può servire.
Per esempio, potreste avere una struttura di directory del vostro progetto come questa:
```
myproject/
manage.py
myproject/
init.py
settings.py
urls.py
asgi.py
wsgi.py
myapp/
init.py
models.py
views.py
tests.py
static/
myapp/
myimage.jpg
myjavascript.js
mycss.css
```
Nel tuo `settings.py`, avrai qualcosa come questo:
```
STATIC_URL = ‘/static/‘
STATICFILES_DIRS = [BASE_DIR / “static”]
```
`STATIC_URL` è l’URL da usare quando si fa riferimento ai file statici.
`STATICFILES_DIRS` è un elenco delle posizioni in cui il comando `collectstatic` cercherà file statici aggiuntivi oltre agli statici standard di app static/ sottodirectory.
Una volta che avrai impostato tutto, puoi eseguire `python manage.py collectstatic`. Questo comando copierà tutti i file dalla tua sottodirectory static/ del tuo progetto al ‘STATIC\_ROOT’ definito nei tuoi settings.
Per includere un file statico nella tua pagina HTML, Django fornisce un tag template `{% static %}`. Ad esempio, potrebbe essere qualcosa di simile a questo:
```
{% load static %}
```
Questo tag dirà a Django di generare un URL alla posizione del tuo file statico.
In produzione, non è consigliate servire i file statici con Django. Invece, si consiglia di utilizzare un web server più efficiente come Nginx o un servizio di storage di file cloud come Amazon S3. Django WhiteNoise è anche un’opzione popolare che permette al tuo stesso server web di servire i file statici.
Riferimenti:
- Django documentation on managing static files: https://docs.djangoproject.com/en/3.2/howto/static-files/
- Django ‘collectstatic’ command: https://docs.djangoproject.com/en/3.2/ref/contrib/staticfiles/#django-admin-comando
- Django static template tag: https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#std:templatefilter-static
- Django WhiteNoise documentation: http://whitenoise.evans.io/en/stable/