Gestion des fichiers statiques (par ex. images, JavaScript, CSS)Lien vers cette rubrique
Les sites Web ont généralement besoin de servir des fichiers supplémentaires tels que des images, du JavaScript ou du CSS. Dans Django, ces fichiers sont appelés « fichiers statiques ». Django met à disposition django.contrib.staticfiles pour vous assister dans cette gestion.
Cette page documente la manière de servir ces fichiers statiques.
Configuration des fichiers statiquesLien vers cette rubrique
Assurez-vous que
django.contrib.staticfilesest inclus dans votre réglageINSTALLED_APPS.Dans votre fichier de réglages, définissez
STATIC_URL, par exemple :STATIC_URL = 'static/'Dans vos gabarits, utilisez la balise de gabarit
staticpour contruire l’URL du chemin relatif donné en utilisant le stockageSTATICFILES_STORAGEconfiguré.{% load static %} <img src="{% static 'my_app/example.jpg' %}" alt="My image">Stockez vos fichiers statiques dans un dossier nommé
staticdans votre application. Par exemple,mon_app/static/mon_app/exemple.jpg.
Votre projet aura probablement aussi des éléments statiques non liés à une application particulière. En plus d’utiliser le répertoire static/ dans vos applications, vous pouvez définir une liste de répertoires (STATICFILES_DIRS) dans votre fichier de réglages indiquant à Django où il trouvera d’autres fichiers statiques. Par exemple :
STATICFILES_DIRS = [
BASE_DIR / "static",
'/var/www/static/',
]
Consultez la documentation du réglage STATICFILES_FINDERS pour plus de détails sur la façon dont staticfiles trouve vos fichiers.
Service des fichiers statiques en développementLien vers cette rubrique
Si vous utilisez django.contrib.staticfiles comme expliqué ci-dessus, runserver fait automatiquement cela lorsque DEBUG est défini à True. Si django.contrib.staticfiles ne se trouve pas dans INSTALLED_APPS, vous pouvez tout de même servir les fichiers statiques manuellement à l’aide de la vue django.views.static.serve().
Ce n’est cependant pas acceptable en production ! Vous pouvez consultez quelques stratégies courantes de déploiement dans Déploiement des fichiers statiques.
For example, if your STATIC_URL is defined as static/, you can
do this by adding the following snippet to your 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)
Service de fichiers téléversés par les utilisateurs durant le développementLien vers cette rubrique
Durant le développement, vous pouvez servir les fichiers téléversés dans MEDIA_ROOT par les utilisateurs en utilisant la vue django.views.static.serve().
Ce n’est cependant pas acceptable en production ! Vous pouvez consultez quelques stratégies courantes de déploiement dans Déploiement des fichiers statiques.
Par exemple, si le réglage MEDIA_URL est défini comme media/, vous pouvez configurer ce service en ajoutant le bout de code suivant dans votre réglage 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)
TestsLien vers cette rubrique
Lors de l’exécution de tests qui utilisent une véritable requête HTTP à la place du client de test intégré (c’est-à-dire en utilisant la classe LiveServerTestCase intégrée), les fichiers statiques doivent être servis tout comme le reste du contenu de sorte que l’environnement de test reproduise l’environnement réel le plus fidèlement possible ; mais LiveServerTestCase ne dispose que d’une fonctionnalité très basique pour servir les fichiers : il ne connaît pas la fonctionnalité de détection des fichiers de l’application staticfiles et suppose que le contenu statique a déjà été collecté dans STATIC_ROOT.
Pour cette raison, staticfiles est fournie avec sa propre classe django.contrib.staticfiles.testing.StaticLiveServerTestCase, une sous-classe de la précédente qui a la capacité de servir de manière transparente tous les fichiers statiques lors de l’exécution de ces tests, d’une manière très semblable à ce que nous obtenons lors du développement avec DEBUG = True, c’est-à-dire sans avoir à les collecter au préalable à l’aide de collectstatic.
DéploiementLien vers cette rubrique
django.contrib.staticfiles fournit une commande de gestion de commodité pour rassembler les fichiers statiques dans un seul répertoire pour pouvoir plus facilement en faire le service.
Définissez le réglage
STATIC_ROOTpour qu’il corresponde au répertoire à partir duquel vous souhaitez servir les fichiers, par exemple :STATIC_ROOT = "/var/www/example.com/static/"Lancez la commande de gestion
collectstatic:$ python manage.py collectstaticCela va copier tous les fichiers de vos dossiers de fichiers statiques vers le répertoire
STATIC_ROOT.Utilisez un serveur Web de votre choix pour servir les fichiers. Déploiement des fichiers statiques aborde certaines stratégies de déploiement des fichiers statiques fréquemment utilisées.
En savoir plusLien vers cette rubrique
Ce document a abordé les bases ainsi que quelques scénarios courants. Pour des détails complets sur tous les réglages, les commandes, les balises de gabarit et les autres fonctions de django.contrib.staticfiles, consultez la référence de staticfiles.