Comment utiliser CSS dans Django?

110

Je crée mon application avec Django et je me demande comment faire en sorte que Django utilise mon fichier CSS? Quels paramètres dois-je faire pour que Django voie le fichier css?

NB: sur une machine locale

gath
la source

Réponses:

48

Si vous utilisez le serveur de développement, suivez le guide pratique du projet django pour la gestion des fichiers statiques afin de configurer vos URL, puis référencez vos fichiers multimédias dans le modèle - par exemple, une image dans un dossier d'image à partir de /site_media/images/foo.gif.

Joe
la source
25
Juste une petite note sur ces documents Django - assurez-vous de sélectionner les documents pour la version de Django que vous utilisez. Les choses semblent avoir beaucoup changé entre les versions en ce qui concerne les fichiers statiques.
Sam Starling
3
@Sam a un excellent point. je ne pourrais pas comprendre les fichiers statiques pour la vie de moi. puis, changez la version de django installée, et voilà. c'était littéralement tout ce que j'avais à faire parce qu'apparemment, je cherchais des documents pour la mauvaise version.
Josh Brown
36

Plus généralement, vous demandez comment servir un fichier statique depuis Django. Si vous utilisez Apache, vous devriez lire http://docs.djangoproject.com/en/dev/howto/deployment/modpython/

Si vous exécutez le serveur de développement (par exemple, sur votre ordinateur portable), lisez http://docs.djangoproject.com/en/dev/howto/static-files/

Notez le gros avertissement concernant le serveur de développement Django:

  • L'utilisation de ce serveur est inefficace et non sécurisée.
  • Ne l'utilisez pas dans un cadre de production.
  • Utilisez ceci uniquement pour le développement.
Peter Rowell
la source
"Ne l'utilisez pas dans un cadre de production." Voulez-vous développer cela?
Chris
@Chris: Vous avez raison, la déclaration était un peu ambiguë. Je faisais référence au serveur de développement Django. Bien que je l'ai exécuté plusieurs fois sur notre site de production, ce n'était que pour de courtes périodes de temps lors du débogage de problèmes épineux.
Peter Rowell
Merci pour la clarification, je regardais mes déploiements django fonctionnant sur Apache en me demandant ce que j'avais mal fait. :)
Chris
1
Agréable. J'aime les 3 articles qui disent la même chose de différentes manières. Merci pour l'avertissement.
KobeJohn
13
J'adore les gens qui viennent 4,5 ans après qu'une réponse a été publiée et qui la votent contre. Je me demande s'ils ont même su ce que Django était en 11/08 ... probablement pas. Ce ne sont pas les points de rep qui me faire, c'est la combinaison affichée de l' ignorance et l' arrogance avec un soupçon d'être waaay fin à la partie. Je me demande comment ils évalueraient mes publications sur comp.lang.c en, disons, 1987? Mieux vaut ne pas demander.
Peter Rowell
13

Cela m'a aussi causé des problèmes pendant un certain temps (404 erreurs non trouvées). Le bit manquant pour moi était de modifier le STATICFILES_DIRStuple dans settings.py pour me donner ceci:

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.
    os.path.join(os.path.dirname(__file__),'media').replace('\\','/'),
)

Cela a ensuite ramassé mes fichiers CSS dans un dossier appelé 'media' qui était au niveau supérieur de mon projet django.

J'avais aussi:

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/media/'

(assurez-vous que vous avez le début /ci-dessus STATIC_URL)

Bien sûr, comme indiqué ci-dessus, vous devez avoir le fichier CSS correctement inclus à partir de vos fichiers html. J'ai eu:

<link href="{{ STATIC_URL }}css/ea_base.css" rel="stylesheet" type="text/css" media="screen" />
Jacanterbury
la source
Enfin, une solution claire, simple et élégante. Fonctionne très bien avec django 1.5.
pbarill
# Utilisez toujours des barres obliques, même sous Windows. .replace('\\','/')est inutile.
mak
12

Quels paramètres dois-je faire pour que Django voie le fichier css?

Aucun.

Assurez-vous que votre modèle inclut le fichier CSS (comme le fait le HTML standard) et placez le fichier CSS sur le serveur multimédia.

Pour clarifier: avec Django, il est fortement recommandé de diffuser tous vos médias (tout ce qui n'est pas du HTML dynamique) à partir d'une instance de serveur différente. La façon dont vous implémentez cela dépend entièrement de vous, mais la plupart des gens créent un sous-domaine.

Oli
la source
2
Salut, Oli. Je sais que cet article date de près de 3 ans, mais est-ce toujours le meilleur moyen de lier le css aux modèles django? Cela semble être le plus simple de lier css à une URL abs comme static.example.com et de stocker tous les fichiers statiques à cette URL.
cp3
0

Eh bien, le moyen le plus simple d'utiliser le CSS avec django est de l'ajouter à vos modèles en tant que fichiers statiques.

Mais c'est un peu comme ajax, je n'ai rien trouvé qui dise comment l'inclure de manière standard.

Il existe un module de compresseur css pour django si vous souhaitez optimiser sa taille.

Roch
la source