41 votes

Aide de l'application Django staticfiles

J'ai un peu de problème avec Django staticfiles app.

J'ai ajouté

'django.contrib.staticfiles',

pour ma INSTALLED_APPS et ont ajouté

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/'

pour ma settings.py le fichier.

Tous mes fichiers statiques sont situés à l'intérieur de l' STATIC_ROOT le dossier sur mon Mac.

Maintenant, dans mon template j'utilise

{{ STATIC_URL }}

qui correctement rend à l' /static/.

Cependant

{{ STATIC_URL }}css/style.css

suite à une erreur 404. Je suis l'aide de la "runserver de" commande " en tant que serveur.

Est-il quelque chose que je suis absent?

119voto

jezdez Points 1254

Je vous invite à lire le howto docs ici: http://docs.djangoproject.com/en/dev/howto/static-files/

En bref: STATIC_ROOT n'est utilisé que si vous appelez la collectstatic manangement de commande. Il n'est pas nécessaire d'ajouter le répertoire à la STATICFILES_DIRS paramètre pour servir vos fichiers statiques!

Au cours du développement (lorsque la détection automatique servant de vue est utilisée) staticfiles recherchera automatiquement les fichiers statiques dans divers lieux (parce que vous appelez son "service" vue avec un chemin d'accès à un fichier statique). Pour cette quête, il va utiliser ce qu'on appelle "trouveurs" (tel que défini dans la STATICFILES_FINDERS réglage).

  1. L'un des détecteurs de défaut est la AppDirectoriesFinder, qui va chercher dans le fichier "/static/" répertoire de chacune des applications de la vôtre INSTALLED_APPS réglage.

  2. Un autre défaut finder est le FileSystemFinder, qui va chercher dans les annuaires que vous spécifiez dans la STATICFILES_DIRS réglage.

BTW, ces deux modèles de recherche sont similaires à la façon dont le modèle des travaux de chargement.

La même technique sera utilisée lors de l'exécution de la collectstatic commande, sauf que maintenant il permettra de recueillir des fichiers à partir de différents endroits (en utilisant les mêmes inventeurs comme ci-dessus), en mettant les fichiers trouvés dans STATIC_ROOT, prêt pour le déploiement.

3voto

kottenator Points 1298

Si vous voulez juste une solution - faites défiler jusqu'à la "Solution".

Vue d'ensemble

Je découvrais le même problème hier. Voici ce que j'ai trouvé:

Tous vous avez besoin est approprié statique finder, qui vous permettra de trouver votre STATIC_ROOT et l'ensemble de son contenu, mais il n'y a pas une telle finder. Voici par défaut trouveurs:

  • django.contrib.staticfiles.trouveurs.AppDirectoriesFinder de recherche installé django applications dirs pour "statique" du dossier, mais la plupart d'entre eux utilisent obsolète "médias", les dossiers pour l'instant.

  • django.contrib.staticfiles.trouveurs.FileSystemFinder - utiliser tous les répertoires mentionnés dans le STATICFILES_DIRS, mais vous ne pouvez pas ajouter de STATIC_ROOT en elle.

  • django.contrib.staticfiles.trouveurs.DefaultStorageFinder - recherche statique dans votre DEFAULT_FILE_STORAGE qui est django.de base.les fichiers.le stockage.FileSystemStorage par défaut et il pointe vers votre MEDIA_ROOT

Solution

C'est tout, pas d'autres choix. Il n'y a pas de choix à utiliser STATIC_ROOT pour l'instant (dans Django 1.3).
Donc j'ai juste écrit mon propre finder pour ces besoins:

  • Mon statique personnalisé le fichier de recherche: 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',
    )
    
  • Si vous voulez l'utiliser avec un autre finders - je suggère de les mettre après à l'intérieur de STATICFILES_FINDERS

Et n'oubliez pas: cette solution doit être utilisée uniquement dans les besoins de développement et jamais sur la production!

3voto

Markus Lenger Points 119

J'ai trouvé une solution de contournement simple et rapide pour gérer les fichiers statiques globaux du projet pendant le développement:

  • Démarrer une nouvelle application contenant les fichiers statiques de vos projets (par exemple, "manage.py startapp static_content")
  • Créez un dossier nommé 'statique' dans cette application et placez-y vos fichiers statiques.
  • Ajoutez votre nouvelle application à la liste des applications installées

1voto

C. Alan Zoppa Points 473

Tout d’abord, assurez-vous que le serveur statique est activé dans votre urls.py POUR LE DÉVELOPPEMENT SEULEMENT.

En outre, vous pouvez avoir une barre oblique supplémentaire dedans. Si votre STATIC_URL == '/ static /', alors

{{STATIC_URL}} / css / style.css doit être {{STATIC_URL}} css / style.css.

1voto

maruusos82 Points 35
 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 pré-alpha SVN-16436)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X