Quelles sont les différences de ces trois URL statiques?
Je ne sais pas si j'ai raison, j'utilise le MEDIA_ROOT
Pour stocker mes photos téléchargées (via models.ImageField()
)
Cependant, j'ai créé un script JS pour mon administrateur et dans admin.py
. J'ai défini les médias comme ci-dessous:
....
class Media:
js = ('/admin/custom.js', )
et mon settings.py
:
....
STATIC_ROOT = "/home/user/project/Django1/top/listing/static"
et j'ai ajouté le custom.js
à STATIC_ROOT/admin/custom.js
, mais cela ne fonctionne pas. Erreur 404 introuvable.
Et puis je change le STATIC_ROOT
En STATICFILES_DIRS
, Et ça marche !!
....
STATICFILES_DIRS = "/home/user/project/Django1/top/listing/static"
Donc, je ne comprends pas ce qui se passe ici. En fait, je ne comprends tout simplement pas quelle est la différence entre STATIC_ROOT
Et STATICFILES_DIRS
.
Actuellement, je teste Django sur ma machine via virtualenv, pas encore déployé, est-ce la raison pour laquelle STATIC_ROOT
Ne fonctionne pas ??
Vous pouvez trouver ces paramètres dans la documentation Django . Voici mes propres définitions et citations de la documentation:
MEDIA_ROOT
est le dossier où les fichiers téléchargés à l'aide de FileField
iront.
Chemin absolu du système de fichiers vers le répertoire qui contiendra fichiers téléchargés par l'utilisateur .
STATIC_ROOT
est le dossier où les fichiers statiques seront stockés après avoir utilisé manage.py collectstatic
Chemin absolu vers le répertoire où
collectstatic
collectera les fichiers statiques pour le déploiement.Si l'application
staticfiles
contrib est activée (par défaut), la commande de gestioncollectstatic
collectera les fichiers statiques dans ce répertoire. Voir le guide sur la gestion des fichiers statiques pour plus de détails sur l'utilisation.
STATICFILES_DIRS
est la liste des dossiers où Django recherchera des fichiers statiques supplémentaires en dehors du dossier static
de chaque application installée.
Ce paramètre définit les emplacements supplémentaires que l'application staticfiles traversera si le Finder
FileSystemFinder
est activé, par exemple si vous utilisez la commande de gestioncollectstatic
oufindstatic
ou utilisez la vue de service de fichiers statiques.
Dans vos paramètres, vous devriez avoir:
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
# Make a Tuple of strings instead of a string
STATICFILES_DIRS = ("/home/user/project/Django1/top/listing/static", )
...où:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
comme défini dans la valeur par défaut Django settings.py
à présent.
STATIC_ROOT
est inutile pendant le développement, il n'est nécessaire que pour le déploiement.
Pendant le développement, STATIC_ROOT
ne fait rien. Vous n'avez même pas besoin de le régler. Django recherche les fichiers statiques dans le répertoire de chaque application (myProject/appName/static
) et les sert automatiquement.
C'est la magie opérée par manage.py runserver
quand DEBUG=True
.
Lorsque votre projet est mis en ligne, les choses diffèrent. Vous utiliserez très probablement du contenu dynamique en utilisant Django et les fichiers statiques seront servis par Nginx. Pourquoi? Parce que Nginx est incroyablement efficace et réduira la charge de travail de Django.
C'est ici que STATIC_ROOT
devient pratique, car Nginx ne sait rien de votre projet Django et ne sait pas où trouver les fichiers statiques.
Vous définissez donc STATIC_ROOT = '/some/folder/'
et dire à Nginx de rechercher des fichiers statiques dans /some/folder/
. Ensuite, vous exécutez manage.py collectstatic
et Django copiera les fichiers statiques de toutes les applications que vous devez /some/folder/
.
STATICFILES_DIRS
est utilisé pour inclure les répertoires supplémentaires que collectstatic
doit rechercher. Par exemple, par défaut, Django ne reconnaît pas /myProject/static/
. Vous pouvez donc l'inclure vous-même.
STATIC_URL = '/static/'
if not DEBUG:
STATIC_ROOT = '/home/Django/www-data/site.com/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
]
Différence entre STATICFILES_DIRS
et STATIC_ROOT
Le STATICFILES_DIRS
peut contenir d'autres répertoires (pas nécessairement des répertoires d'application) avec des fichiers statiques et ces fichiers statiques seront collectés dans votre STATIC_ROOT lorsque vous exécutez collectstatic
. Ces fichiers statiques seront alors servis par votre serveur web et ils seront servis depuis votre STATIC_ROOT.
Si vous avez actuellement des fichiers dans votre STATIC_ROOT que vous souhaitez servir, vous devez les déplacer vers un autre répertoire et placer cet autre répertoire dans STATICFILES_DIRS
. Votre STATIC_ROOT
le répertoire doit être vide et tous les fichiers statiques doivent être collectés dans ce répertoire.
MEDIA_ROOT
où les fichiers multimédias, tous les fichiers téléchargés vont. Exemple: images, fichiers