Quel est le point de Django collectstatic?
C'est probablement une question stupide, mais c'est juste pas cliquer dans ma tête.
Dans Django, la convention est de mettre tous vos fichiers statiques (j'.e css, js) spécifique à votre application dans un dossier appelé statique. Ainsi, la structure devrait ressembler à ceci:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
Dans mysite/settings.py j'ai:
STATIC_ROOT = 'staticfiles'
Donc, quand je lance la commande:
python manage.py collectstatic
Il crée un dossier appelé staticfiles au niveau de la racine (donc même répertoire myapp/)
Quel est le point de tout cela? N'est-il pas juste de créer une copie de tous mes fichiers statiques?
Vous devez vous connecter pour publier un commentaire.
Collecter les fichiers statiques à partir de plusieurs applications dans un seul chemin
Bien, un seul Django projet peut utiliser plusieurs apps, alors là, vous n'avez qu'un
myapp
, il peut effectivement êtremyapp1
,myapp2
, etcEn les copiant à partir de l'intérieur de chacune des applications dans un seul dossier, vous pouvez pointer votre frontend serveur web (nginx par exemple) à ce dossier unique
STATIC_ROOT
et de servir les fichiers statiques à partir d'un seul endroit, plutôt que de configurer votre serveur web pour servir les fichiers statiques à partir de plusieurs chemins.Persistante des Url avec ManifestStaticFilesStorage
D'une note sur le hachage MD5 être ajouté au nom de fichier pour la gestion des versions: Ce n'est pas le comportement par défaut de
collectstatic
, commesettings.STATICFILES_STORAGE
par défautStaticFilesStorage
(ce qui ne veut pas le faire)Le hash MD5 donnera un coup de pied dans, par exemple, si vous définissez l'utilisation
ManifestStaticFilesStorage
, qui annonces de comportement.Django fichiers statiques peuvent être dans de nombreux endroits. Un fichier qui est servi comme
/static/img/icon.png
pourrait viennent de nombreux endroits. Par défaut:FileSystemFinder
va chercherimg/icon.png
dans chacun deSTATICFILES_DIRS
,AppDirectoriesFinder
va chercherimg/icon.png
dans lestatic
sous-dossier dans chacun de vosINSTALLED_APPS
. Cela permet à des bibliothèques comme Django Admin d'ajouter leurs propres fichiers statiques de votre application.Maintenant: cela ne fonctionne que si vous exécutez
manage.py runserver
avec DEBUG=1. Quand vous allez vivre, le Django processus ne répondent plus à la statique de l'actif. Il serait inefficace d'utiliser Django pour servir de ces, il y a plus d'outils spécialisés spécialement pour cela.Au lieu de cela, vous devriez faire quelque chose comme ceci:
static
répertoire sur votre serveur web ou un tiers de stockage de fichiers)/static/*
directement à partir de ce répertoire et de rediriger toutes les autres demandes de Django.collectstatic
est un ready-made script qui prépare cet annuaire pour vous, de sorte que vous pouvez vous connecter directement à votre script de déploiement.Dans l'installation de production, vous voulez avoir persistante Url. L'URL ne change pas à moins que le fichier des modifications de contenu.
C'est pour éviter d'avoir des clients à avoir une mauvaise version de CSS ou JS fichier sur leur ordinateur lors de l'ouverture d'une page web à partir de Django. Django staticfiles détecte les modifications de fichiers et les mises à jour des Url en conséquence, de sorte que si CSS ou JS modifications de fichiers le navigateur web de téléchargements de la nouvelle version.
C'est habituellement obtenue par l'ajout de hachage MD5 pour le nom de fichier lors de
collectstatic
exécuter.Edit: voir Aussi liées à répondre à de multiples applications.
settings.STATICFILES_STORAGE
par défautStaticFilesStorage
, de sorte que le MD5 donnera le coup d'après, par exemple, vous réglez àManifestStaticFilesStorage
, ai-je raison?Il est utile lorsqu'il y a plusieurs django applications dans le site.
collectstatic
va alors récupérer les fichiers statiques de toutes les applications en un seul endroit, de sorte qu'il pourrait être servi dans un environnement de production.