111 votes

Comment utiliser les CSS dans Django ?

Je suis en train de créer mon application en utilisant Django, et je me demande comment je peux faire en sorte que Django utilise mon fichier CSS ? Quels paramètres dois-je définir pour que Django voie le fichier CSS ?

NB : Sur une machine locale

48voto

Joe Points 1537

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

25 votes

Une petite remarque sur les documents relatifs à Django : assurez-vous de sélectionner les documents correspondant à la version de Django que vous utilisez. Les choses semblent avoir beaucoup changé entre les versions en ce qui concerne les fichiers statiques.

3 votes

@Sam a une bonne idée. Je n'ai pas réussi à comprendre les fichiers statiques. Puis, j'ai changé la version de django et voilà. C'est tout ce que j'ai dû faire parce qu'apparemment je regardais la documentation de la mauvaise version.

36voto

Peter Rowell Points 12444

De manière plus générale, vous demandez comment servir un fichier statique à partir de Django. Si vous êtes sous 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 le document suivant http://docs.djangoproject.com/en/dev/howto/static-files/

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

  • L'utilisation de ce serveur est inefficace et peu sûre.
  • Ne l'utilisez pas dans un contexte de production.
  • Ne l'utilisez que pour le développement.

0 votes

"Ne pas utiliser ceci dans un contexte de production." Pourriez-vous développer ce point ?

0 votes

@Chris : Vous avez raison, ma déclaration était un peu ambiguë. Je faisais référence au serveur de développement Django. Bien que je l'aie utilisé à quelques reprises sur notre site de production, ce n'était que pour de courtes périodes de temps pendant le débogage de problèmes épineux.

0 votes

Merci pour cette clarification, je regardais mes déploiements de django fonctionnant sur apache en me demandant ce que j'avais fait de mal :)

13voto

jacanterbury Points 446

Cela m'a également posé des problèmes pendant un certain temps (erreurs 404 not found). La partie manquante pour moi a été de modifier le fichier STATICFILES_DIRS 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('\\','/'),
)

Il a ensuite récupéré mes fichiers CSS dans un dossier appelé " media " qui se trouvait 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 premier / ci-dessus dans STATIC_URL )

Bien sûr, comme indiqué ci-dessus, vous devez inclure le fichier CSS dans vos fichiers html. Je l'avais :

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

0 votes

Enfin, une solution claire, simple et élégante. Fonctionne bien avec django 1.5.

0 votes

# Toujours utiliser des barres obliques, même sous Windows. .replace('\\','/') n'est pas nécessaire.

12voto

Oli Points 65050

Quels paramètres dois-je définir 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 de médias.

Pour clarifier : avec Django, il est fortement recommandé de servir 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 mettez en œuvre cette recommandation vous appartient, mais la plupart des gens créent un sous-domaine.

2 votes

Salut, Oli. Je sais que ce post date de près de 3 ans, mais est-ce toujours la meilleure façon de lier les css aux modèles django ? Il me semble que le plus simple serait de lier css à une URL abs comme static.example.com et de stocker tous les fichiers statiques à cette URL.

8voto

James Selvakumar Points 393

La documentation officielle de Django ne m'a pas aidé. J'espère que l'article de blog " Django : Comment servir des fichiers statiques " aide certains d'entre vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X