web-dev-qa-db-fra.com

Django - Impossible de charger des fichiers CSS statiques

J'exécute le serveur de développement de Django (runserver) sur ma machine locale (Mac OS X) et je n'arrive pas à charger les fichiers CSS.

Voici les entrées pertinentes dans settings.py:

STATIC_ROOT = '/Users/username/Projects/mysite/static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)

STATICFILES_FINDERS = (
'Django.contrib.staticfiles.finders.FileSystemFinder',
'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'Django.contrib.staticfiles.finders.DefaultStorageFinder',
)

INSTALLED_APPS = (
# other apps ...
'Django.contrib.staticfiles',
)

Dans mon views.py, je demande le contexte:

return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))

Et dans mon modèle, le {{ STATIC_URL }} s'affiche correctement:

<link type="text/css" href="{{ STATIC_URL }}css/main.css" />

Se transforme en:

<link type="text/css" href="/static/css/main.css"/>

C'est là que se trouve le fichier. J'ai également exécuté collectstatic pour m'assurer que tous les fichiers ont été collectés.

J'ai également les lignes suivantes dans mon urls.py:

from Django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()

Je suis nouveau à Django donc il me manque probablement quelque chose de simple - j'apprécierais toute aide.

48
tchaymore

Lisez attentivement ceci: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

Est Django.contrib.staticfiles dans votre INSTALLED_APPS dans settings.py?

Est DEBUG=False? Si c'est le cas, vous devez appeler runserver avec le --insecure paramètre:

python manage.py runserver --insecure

collectstatic n'a aucune incidence sur la diffusion de fichiers via le serveur de développement. C'est pour collecter les fichiers statiques dans un seul emplacement STATIC_ROOT pour que votre serveur Web les trouve. En fait, exécuter collectstatic avec votre STATIC_ROOT défini sur un chemin dans STATICFILES_DIRS est une mauvaise idée. Vous devez vérifier deux fois pour vous assurer que vos fichiers CSS existent déjà.

70
GDorn

Avec Django 1.11.x +, vous devez configurer les fichiers statiques dans settings.py as,

STATIC_URL = '/static/' # the path in url

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

et l'utiliser avec une balise de modèle statique,

{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
20
All Іѕ Vаиітy

Une autre chose simple à essayer est d'arrêter, puis de redémarrer le serveur, par exemple.

$ python manage.py runserver

J'ai regardé les autres réponses, mais le redémarrage du serveur a fonctionné pour moi.

5
ibowman

Ajoutez le code suivant à votre settings.py:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

Après cela, créez le dossier statique dans le répertoire racine de votre projet.

Pour charger les fichiers statiques sur des modèles, utilisez:

{% load static %}
  <img src="{% static "images/index.jpeg" %}" alt="My image"/>
4
Alan Paul

Sont-ils absents de votre settings.py? Je colle un des paramètres de mon projet:

TEMPLATE_CONTEXT_PROCESSORS = ("Django.contrib.auth.context_processors.auth",
"Django.core.context_processors.debug",
"Django.core.context_processors.i18n",
"Django.core.context_processors.media",
"Django.core.context_processors.static",
"Django.contrib.messages.context_processors.messages")

C'est aussi ce que j'ai dans mon urls.py:

urlpatterns += patterns('', (
        r'^static/(?P<path>.*)$',
        'Django.views.static.serve',
        {'document_root': 'static'}
))
3
Geo

ajoutée

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )

et supprimé STATIC_ROOT de settings.py, Ça a marché pour moi

2
Vinner

Ces étapes fonctionnent pour moi, voir juste Charger des fichiers statiques (CSS, JS et images) dans Django

J'utilise Django 1.10.

  1. créer un dossier static au même niveau que settings.py, le chemin de mon settings.py est ~/djcode/mysite/mysite/settings.py, donc ce répertoire est ~/djcode/mysite/mysite/static/;
  2. créez deux dossiers static_dirs et static_root dans static, soit ~/djcode/mysite/mysite/static/static_dirs/ et ~/djcode/mysite/mysite/static/static_root/;
  3. écrivez settings.py comme ceci:

    # Static files (CSS, JavaScript, Images)
    
    # https://docs.djangoproject.com/en/1.10/howto/static-files/
    
    STATIC_URL = '/static/'
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root')
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'),
    )
    
  4. faites cette commande $ python manage.py collectstatic dans Shell;

  5. créez un dossier css dans static_dirs et placez-le dans votre propre fichier .css, le chemin de votre fichier css est ~/djcode/mysite/mysite/static/static_dirs/css/my_style.css;

  6. changer la balise <link> dans le fichier .html: <link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}">,

Enfin, le chemin de ce lien est http://192.168.1.100:8023/static/css/my_style.css

Bingo!

2
Belter

DEBUG = True dans mes paramètres locaux l'a fait pour moi.

2
webjay

ajouter le suivant dans settings.py

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')  
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
0
Amandeep Singh

Vous aviez le même chemin dans STATICFILES_DIRS ET STATIC_ROOT, j'ai rencontré le même problème et ci-dessous était l'exception -

ImproperlyConfigured: le paramètre STATICFILES_DIRS ne doit pas contenir le paramètre STATIC_ROOT

Pour le local, vous n'avez pas besoin de STATICFILES_DIRS, car de toute façon vous n'avez pas besoin d'exécuter collectstatic. Une fois que vous l'avez commenté, cela devrait fonctionner correctement.

0
Mutant

Vous pouvez simplement définir STATIC_ROOT selon que vous exécutez sur votre hôte local ou sur votre serveur. Pour identifier cela, reportez-vous à cette post .

Et vous pouvez réécrire votre configuration STATIC_ROOT en:

import sys

if 'runserver' in sys.argv:
    STATIC_ROOT = ''
else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
0
Aslamah Rahman

Ajoute ça "Django.core.context_processors.static", processeur de contexte dans votre settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
"Django.core.context_processors.static",

)

0
cjahangir

J'ai le même problème (serveur ununtu 16.04).

Cela m'a aidé

python manage.py collectstatic --noinput

0
alcoder

Si vous définissez DEBUG = FALSE, vous devez suivre les étapes

Dans votre fichier urls.py: ajoutez cette ligne

from Django.views.static import serve

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),

0
Thusitha Deepal

Avez-vous ajouté dans vos modèles:

{% load staticfiles %}

Cela charge ce qui est nécessaire, mais pour une raison quelconque, j'ai expérimenté que cela fonctionne parfois sans cela ... ???

0
viridis

Vérifiez si votre application principale (où se trouve le répertoire statique) est incluse dans votre INSTALLED_APPS.

Les fichiers sont recherchés à l'aide des viseurs activés. La valeur par défaut consiste à rechercher dans tous les emplacements définis dans STATICFILES_DIRS et dans le répertoire "statique" des applications spécifiées par le paramètre INSTALLED_APPS.

0
Guy de Carufel