J'ai un petit problème avec Django's application staticfiles .
J'ai ajouté
'Django.contrib.staticfiles',
à mes INSTALLED_APPS et ont ajouté
STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/Django/mylook/static/'
à mon settings.py
fichier.
Tous mes fichiers statiques se trouvent dans le STATIC_ROOT
dossier sur mon Mac.
Maintenant, dans mon modèle, j'utilise
{{ STATIC_URL }}
qui rend correctement à /static/
.
Pourtant
{{ STATIC_URL }}css/style.css
entraîner une erreur 404. J'utilise la commande "runserver" comme serveur.
Y a-t-il quelque chose qui me manque?
Je vous implore de lire les documents pratiques ici: http://docs.djangoproject.com/en/dev/howto/static-files/
En bref: STATIC_ROOT n'est utilisé que si vous appelez la commande collectstatic manangement. Il n'est pas nécessaire d'ajouter le répertoire au paramètre STATICFILES_DIRS pour servir vos fichiers statiques!
Pendant le développement (lorsque la vue de diffusion automatique est utilisée), les fichiers statiques rechercheront automatiquement les fichiers statiques à divers emplacements (car vous appelez sa vue de diffusion avec un chemin d'accès à un fichier statique). Pour cette recherche, il utilisera les dénommés "finders" (tels que définis dans le paramètre STATICFILES_FINDERS).
L'un des moteurs de recherche par défaut est AppDirectoriesFinder, qui recherchera dans le répertoire "/ static /" de chacune des applications de votre paramètre INSTALLED_APPS.
Un autre Finder par défaut est FileSystemFinder, qui recherchera dans les répertoires que vous spécifiez dans le paramètre STATICFILES_DIRS.
BTW, ces deux modèles de recherche sont similaires au fonctionnement du chargement de modèle.
La même technique sera utilisée lors de l'exécution de la commande collectstatic, sauf qu'elle va maintenant collecter les fichiers des différents emplacements (en utilisant les mêmes viseurs que ci-dessus), en plaçant les fichiers trouvés dans STATIC_ROOT, prêts pour le déploiement.
J'ai trouvé une solution rapide et facile pour servir les fichiers statiques globaux du projet pendant le développement:
Si vous voulez juste une solution - faites défiler jusqu'à la "Solution".
Je découvrais le même problème hier. Voici ce que j'ai trouvé:
Tout ce dont vous avez besoin est un Finder statique approprié, qui trouvera votre STATIC_ROOT et tout son contenu, mais il n'y a pas un tel Finder. Voici les moteurs de recherche par défaut:
Django.contrib.staticfiles.finders.AppDirectoriesFinder - recherche installée Django applications dir pour le dossier 'statique', mais la plupart d'entre eux utilisent pour l'instant des dossiers "médias" obsolètes.
Django.contrib.staticfiles.finders.FileSystemFinder - utilisez tous les répertoires mentionnés dans STATICFILES_DIRS, mais vous ne pouvez pas y ajouter STATIC_ROOT.
Django.contrib.staticfiles.finders.DefaultStorageFinder - recherchez statique dans votre DEFAULT_FILE_STORAGE qui est Django.core.files. storage.FileSystemStorage par défaut et il pointe vers votre MEDIA_ROOT
C'est tout, pas de choix supplémentaires. Il n'y a pas de choix pour utiliser STATIC_ROOT pour l'instant (dans Django 1.3).
Je viens donc d'écrire mon propre Finder personnalisé pour ces besoins:
Mon fichier de recherche statique personnalisé: finders.py:
from Django.core.files.storage import FileSystemStorage
from Django.contrib.staticfiles.finders import BaseStorageFinder
from Django.conf import settings
class StaticFinder(BaseStorageFinder):
storage = FileSystemStorage(settings.STATIC_ROOT, settings.STATIC_URL)
settings.py:
STATICFILES_FINDERS = (
'finders.StaticFinder',
)
Et rappelez-vous: cette solution ne doit être utilisée que dans les besoins de développement et jamais en production!
STATIC_ROOT = '/home/ws/be/bla/'
STATICFILES_DIRS = ('/home/ws/be/static/',)
STATIC_URL = '/static/'
Cela fonctionne pour moi. STATIC_ROOT doit être différent de STATICFILES_DIRS (Django version 1.4 pre-alpha SVN-16436)
Tout d'abord, assurez-vous que service statique est activé dans votre urls.py POUR LE DÉVELOPPEMENT UNIQUEMENT.
En outre, vous pouvez avoir une barre oblique supplémentaire là-dedans. Si votre STATIC_URL == '/ statique /', alors
{{STATIC_URL}}/css/style.css doit être {{STATIC_URL}} css/style.css.