comment faire pointer correctement à une image statique dans django
J'ai un modèle qui rend une image:
{% load staticfiles %}
<img src="{% static "img/logo.png" %}" alt="My image"/>
Le lien de l'image est cassé, mais il souligne:
localhost/static/img/logo.png
Quelles sont les valeurs que je dois mettre pour static_root, static_url, et STATICFILES_DIRS pour obtenir cette image à afficher correctement?
C'est ma structure de répertoire:
myprojectname (haut niveau)
--- myprojectname
--- --- myproectname
--- --- --- les paramètres de
--- --- --- --- base.py (setting.py)
--- --- statique
--- --- --- img
C'est ma configuration statique dans les paramètres:
STATIC_ROOT = '/Users/myuser/myprojectname/myprojectname'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
#normpath(join(SITE_ROOT, 'static')),
os.path.join(BASE_DIR, "static"),
'/Users/myuser/myprojectname/myprojectname/static',
)
C'est ce qu'il indique:
J'ai déjà fait un collectstatic et cela ne fonctionne pas.
Quel est votre environnement de serveur web? Exécutez-vous
je suis en cours d'exécution manage.py sur ma machine locale. Selon cette course dans les dev vont servir les fichiers: docs.djangoproject.com/en/1.6/howto/static-files
Vous devez poster la structure de répertoire de votre application, en plus de vos paramètres pour STATIC_URL, et STATICFILES_DIRS à diagose le problème.
J'ai ajouté de la structure de répertoire et les paramètres de config.
manage.py runserver
, ou avez-vous un bon serveur? Django n'a pas l'habitude de servir des fichiers statiques à tous, et vous devez configurer votre serveur web pour les servir directement, sauf lorsque vous exécutez manage.py runserver
, qui t servir des fichiers statiques (puisque vous n'avez pas de serveur web dans ce cas, de prendre cette responsabilité)je suis en cours d'exécution manage.py sur ma machine locale. Selon cette course dans les dev vont servir les fichiers: docs.djangoproject.com/en/1.6/howto/static-files
Vous devez poster la structure de répertoire de votre application, en plus de vos paramètres pour STATIC_URL, et STATICFILES_DIRS à diagose le problème.
J'ai ajouté de la structure de répertoire et les paramètres de config.
OriginalL'auteur Atma | 2014-03-27
Vous devez vous connecter pour publier un commentaire.
Fichiers statiques peuvent être source de confusion dans Django. Je vais essayer de l'expliquer le plus simplement possible...
STATIC_ROOT
C'est le répertoire que vous devez servir les fichiers statiques à partir de production.
STATICFILES_DIRS
C'est le répertoire que vous devez servir les fichiers statiques à partir de développement.
STATIC_ROOT et STATICFILES_DIRS ne peut pas pointer vers le même répertoire.
Django est un très modulaire cadre. Certains modules de l'application contiennent leurs propres templates, css, images et JavaScript. Django admin est une telle application. Django s'étend cette modularité des applications que vous créez à l'aide de différents répertoires pour les fichiers statiques dans le développement versus production.
Quand
DEBUG = True
et que vous avez inclusdjango.core.staticfiles
dans votreINSTALLED_APPS
, Django va servir les fichiers situés dans leSTATICFILES_DIRS
tuple à l'aide de laSTATIC_URL
chemin comme point de départ.Dans la production de cette responsabilité devrait être accordée à Nginx, Apache, CloudFront, etc. Lorsque
DEBUG = False
, Django ne sera pas automatiquement à servir des fichiers statiques.Lorsque vous exécutez:
Les fichiers spécifiés dans le STATICFILES_DIRS sont copiés dans le STATIC_ROOT à être déployé.
Donc, pour répondre à votre question, je voudrais faire le suivant:
Créer un autre répertoire pour stocker vos fichiers statiques dans le développement et d'ajouter que le chemin d'accès à votre STATICFILES_DIRS. J'ai l'habitude d'appeler ce dossier "statique-actifs". Il peut se trouver au même niveau que votre "statique" répertoire.
Ensemble STATIC_ROOT le chemin d'accès à votre "statique" répertoire.
Si vous regardez de près le chemin qui retourne une erreur 404 dans votre capture d'écran, le chemin de l'image est spécifiée sous la forme: /static/img/logo.png, mais votre répertoire pour les images: /static/images/
Afin de vérifier le chemin de l'image à assurez-vous que vous avez pointant vers le bon répertoire.
Vous êtes les bienvenus. Django a beaucoup de paramètres et des fichiers statiques ont déclenché moi, plus que quelques fois.
Merci pour ce commentaire. Il est étonnamment difficile de trouver une explication claire dans la documentation.
OriginalL'auteur Brandon
Dossier "staticfiles" dans la racine de votre projet où settings.py existe
Dans staticfiles vous pouvez aller dans cette voie..
Dans settings.py
Dans base.html
Dans d'autres fichiers de modèle dans lequel vous comprennent base.html
Merci beaucoup. Cela a fonctionné parfaitement pour moi!
OriginalL'auteur 4dgaurav