web-dev-qa-db-fra.com

Django: CSS ne fonctionne pas

Je suis encore nouveau à Django et j'ai des problèmes avec mon fonctionnement CSS.
J'ai suivi la direction du lien: tutoriel Django Static Link , sur la gestion des fichiers statiques. Mais cela ne fonctionne toujours pas.

Paramètres

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/Users/a9austin/Development/sites/AlphaSocks/src/static_root/'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/Django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/Users/a9austin/Development/sites/AlphaSocks/src/staticfiles'

)

vue

#from Django.http import HttpResponse
from Django.shortcuts import render_to_response


def index(request):
return render_to_response('index.html')


index.html

<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css" media="screen" >

Et l'organisation des répertoires

src-> staticfiles-> css-> style.css



Merci beaucoup, votre aide et votre temps sont très appréciés!

14
AustinT

Pour que Django serve des fichiers statiques, vous devez vous assurer que vous disposez de quelques paramètres.

STATIC_URL

Ce paramètre spécifie l'URL à laquelle les fichiers statiques doivent correspondre. Vous l'avez déjà fait.

STATICFILES_DIRS

Cela spécifie tous les dossiers de votre système où Django doit rechercher des fichiers statiques. L'idée est que vous pourriez avoir quelques applications dans votre projet, et chaque application peut nécessiter un ensemble différent de fichiers statiques. Ainsi, à des fins d'organisation, chaque application peut contenir un répertoire static où elle ne stockera que ses fichiers statiques. Ainsi, Django doit avoir un moyen de savoir où se trouvent ces répertoires. C'est à cela que sert ce paramètre.

RACINE_STATIQUE

Ce paramètre spécifie où Django copiera tous les fichiers statiques et non où se trouvent déjà les fichiers statiques. L'idée est qu'une fois que vous quittez le développement en production, Django ne peut plus servir de fichiers statiques en raison de problèmes que je n'irai pas ici (c'est dans l'article ). Cependant pour la production, tous les fichiers statiques doivent être dans un seul répertoire, au lieu de plusieurs comme spécifié dans STATICFILES_DIRS. Ce paramètre spécifie donc un répertoire dans lequel Django copiera tous les fichiers statiques de tous les fichiers de STATICFILES_DIRS En exécutant la commande suivante:

$ python manage.py collectstatic

Veuillez noter que cela n'est nécessaire qu'une fois en production et que le répertoire spécifié ici ne peut pas être le même que n'importe quel répertoire spécifié dans STATICFILES_DIRS.

Urls.py

En développement pour Django pour servir vos fichiers statiques, vous devez inclure les URL statiques dans votre urls.py:

from Django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = ...

urlpatterns += staticfiles_urlpatterns()

Une fois que vous aurez terminé toutes les choses ci-dessus, vos fichiers statiques devraient être servis tant que vous avez DEBUG = True. Sur la liste ci-dessus, vous semblez ne remplir que STATIC_URL. Veuillez également noter que toutes les étapes que j'ai décrites ci-dessus se trouvent dans les documents que vous avez liés dans votre question ( link ). Cela peut être un peu déroutant au début, mais si vous le lisez plusieurs fois, cela devient plus clair.

30
miki725

L'ajout de RequestContext à la réponse devrait charger la variable STATIC_URL dans le modèle.

Essayez de changer:

from Django.shortcuts import render_to_response

def index(request):
    return render_to_response('index.html')

à:

from Django.shortcuts import render_to_response
from Django.template.context import RequestContext

def index(request):
    return render_to_response("index.html", context_instance=RequestContext(request)) 

Reportez-vous à la documentation Django sur référence aux fichiers statiques dans les modèles pour plus d'informations.

1
kavdev

Après avoir tout fait, définissez DEBUG = True, python collectstatic, effacement du cache, ouverture en mode navigation privée si le problème persiste, copiez votre fichier .css dans un autre nouveau fichier .css dans un dossier statique, puis exécutez la commande collectstatic. Cela a fonctionné pour moi. J'espère que cela vous aidera.

0
Varidhi Deshpande