Django - fichier statique introuvable
j'ai vu plusieurs billets pour ce numéro mais n'ai pas trouvé ma solution.
j'essaie de servir des fichiers statiques dans mon environnement de développement Django 1.3.
Voici mes paramètres
...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/static/',
)
...
My urls.py
urlpatterns = patterns('',
...
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
...
);
Mon /home/glisse/Documents/django/cbox/static/ répertoire est comme
css
main.css
javascript
image
j'obtiens une erreur 404 en essayant de accès http://127.0.0.1:8000/static/css/main.css .
dois-je spécifier les motifs pour css, javascript et les images individuellement ?
5 réponses
I confused STATIC_ROOT and STATICFILES_DIRS
en fait, je ne comprenais pas vraiment l'utilité de STATIC_ROOT . Je pensais que c'était le répertoire sur lequel je dois mettre mes fichiers communs. Ce répertoire est utilisé pour la production, c'est le répertoire sur lequel les fichiers statiques seront mis (collectés) par collectstatic .
STATICFILES_DIRS est celui dont j'ai besoin.
puisque je suis dans un environnement de développement, la solution pour moi est de ne pas utiliser STATIC_ROOT (ou de spécifier un autre chemin) et de définir mon répertoire de fichiers communs dans STATICFILES_DIRS :
#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static/'),
)
aussi n'oubliez pas de from django.conf import settings
servir des fichiers statiques peut être réalisé de plusieurs façons; voici mes notes à moi-même:
- ajouter un
static/my_app/
répertoire àmy_app
(voir la note sur l'espace de noms ci-dessous) - définissez un nouveau répertoire de haut niveau et ajoutez-le à STATICFILES_DIRS dans settings.py (notez que
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
je préfère la première voie, et une configuration qui est proche de la voie défini dans le documentation , donc pour servir le fichier admin-custom.css
pour outrepasser un couple de styles d'administration, j'ai une configuration comme ceci:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
ceci est ensuite utilisé dans le modèle comme ainsi:
# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
pendant le développement, si vous utilisez django.contrib.staticfiles [ed: installé par défaut], cela sera fait automatiquement par runserver lorsque DEBUG est défini à True [...]
lors du déploiement, j'exécute collectstatic
et je sers des fichiers statiques avec nginx.
Les docs qui a dissipé la confusion pour moi:
STATIC_ROOT
le chemin absolu vers le répertoire où collectstatic recueillera les fichiers statiques pour le déploiement.
...c'est pas un endroit pour stocker vos fichiers statiques de façon permanente. Vous devez faire cela dans les répertoires qui seront trouvés par les finders de staticfiles, qui par défaut sont des sous-répertoires 'static/' app et tous les répertoires que vous incluez dans STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
nom de fichier statique
maintenant nous pourrions être en mesure de nous en sortir en mettant nos fichiers statiques directement dans my_app/static/ (plutôt que de créer un autre sous-répertoire my_app), mais ce serait en fait une mauvaise idée. Django utilisera le premier fichier statique il trouve dont le nom correspond, et si vous aviez un fichier statique avec le même nom dans une autre application, Django serait incapable de les distinguer. On doit pouvoir pointer Django à la bonne, et la façon la plus facile d'assurer cela est de les nommer. C'est, en plaçant ces fichiers statiques à l'intérieur d'un autre répertoire nommé pour l'application elle-même.
STATICFILES_DIRS
votre projet aura probablement aussi des actifs statiques qui ne sont pas liés à une application en particulier. En plus de l'utilisation d'un répertoire/ statique à l'intérieur de vos applications, vous pouvez définir une liste de répertoires (STATICFILES_DIRS) dans votre fichier de paramètres où Django cherchera également des fichiers statiques.
il ne pouvait y avoir que deux choses settings.py fichier qui rend vos fichiers statiques servir.
1) STATIC_URL = '/ static / '
2) STATICFILES_DIRS = ( OS.chemin.join(BASE_DIR, " static"), )
et vos fichiers statiques doivent se trouver dans le répertoire static qui est dans le même répertoire que le fichier de paramètres du projet.
même si vos fichiers statiques ne sont pas chargés alors la raison est , vous pourriez avoir gardé
DEBUG = False
le changer en vrai (strictement pour le développement seulement). En production, il suffit de changer STATICFILES_DIRS à n'importe quel chemin où les fichiers statiques se trouvent.
une autre erreur peut être de ne pas avoir votre application listée dans le INSTALLED_APPS
listing like:
INSTALLED_APPS = [
# ...
'your_app',
]
sans l'avoir dans, vous pouvez faire face à des problèmes comme ne pas détecter vos fichiers statiques, essentiellement tous les fichiers impliquant votre application. Même si elle peut être correcte comme suggéré dans la réponse correcte en utilisant:
STATICFILES_DIRS = (adding/path/of/your/app)
peut être l'une des erreurs et doit être revu si obtenir cette erreur.
{'document_root', settings.STATIC_ROOT}
doit être
{'document_root': settings.STATIC_ROOT}
ou vous obtiendrez une erreur comme
dictionary update sequence element #0 has length 6; 2 is required