Un exemple simple de Django et CSS

Je suis nouveau à Django, et j'essaye de mettre en place une application Django très simple.

Maintenant, je suis au chapitre 5 dans le Django de livres en ligne : http://www.djangobook.com/en/2.0/chapter05/

Tout ce que je veux faire maintenant, avant de commencer à essayer les bases de données, c'est d'ajouter quelques simples CS et J à l'application telle quelle.

alors la question est, comment je fais ça? Je n'ai qu'une application, et je ne veux qu'une main.css dans un dossier css, et l'un des principaux.js dans un js dossier.

j'ai vérifié le https://docs.djangoproject.com/en/1.3/howto/static-files/#staticfiles-in-templates page, mais après avoir lu et lu, il ne semble pas y avoir beaucoup de travail en termes d'exemples.

Comment puis-je importer les feuilles de style/css (y a-t-il un helper comme CakePHP?), où puis-je mettre les fichiers CSS et JS, et dois-je configurer le truc statique?

mise à JOUR: le lien : Rendu CSS dans Django n'aide pas beaucoup. Principalement en ce que ça n'a pas fonctionné pour moi, mais surtout je n'aime pas la partie "if debug". Que se passe-t-il quand je passe à prod? Pourquoi est-ce que mon dossier média serait défini différemment pour prod et local dev de toute façon? Ne devrait-il pas être relatif, ou même au même endroit?

19
demandé sur Community 2012-02-05 04:50:49

5 réponses

si vous suivez les directives de django, vous pouvez simplifier grandement votre vie.

dans votre code échantillon, à l'intérieur de votre application répertoire, créer un dossier appelé statique. Dans ce dossier, placez vos fichiers css.

Exemple:

$ django-admin.py startproject myproject
$ cd myproject
myproject$ python manage.py startapp myapp
myproject$ mkdir myapp/static
myproject$ cd myapp/static
myproject/myapp/static$ nano style.css

dans vos gabarits:

<link rel="stylesheet" href="{{ STATIC_URL }}style.css" />

assurez-vous d'ajouter myappINSTALLED_APPS liste settings.py. Maintenant, lorsque vous utilisez le haut-serveur de développement, votre feuille de style sera restituée correctement.

Django cherche un static répertoire à l'intérieur des applications installées par défaut, et avec les versions actuelles de django, les fichiers statiques sont activés par défaut.


L'exemple Django a le chemin my_app/static/my_app/myimage.jpg qui est un peu déroutant si votre application et le projet du même nom.

C'est recommandé car lorsque vous exécutez collectstatic pour rassembler tous vos fichiers statiques, fichiers avec le même nom sera écrasé. Si vous avez un fichier nommé myimage.jpg dans une autre application, elle sera écrasée. Donner le nom de l'application à l'intérieur du répertoire statique empêchera cela, parce que la structure exacte du répertoire sera répliquée à l'intérieur de votre STATIC_ROOT répertoire.

un exemple simple pour illustrer le point. Si vous avez un projet django avec deux applications, comme ceci:

.
├── assets
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── models.py
│   ├── static
│   │   └── myapp
│   │       └── test.txt
│   ├── tests.py
│   └── views.py
├── myproj
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── otherapp
    ├── __init__.py
    ├── models.py
    ├── static
    │   └── otherapp
    │       └── test.txt
    ├── tests.py
    └── views.py

assets votre STATIC_ROOT. Maintenant, quand vous exécutez collectstatic:

.
├── assets
│   ├── myapp
│   │   └── test.txt
│   └── otherapp
│       └── test.txt
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── static
│   │   └── myapp
│   │       └── test.txt
│   ├── tests.py
│   └── views.py
├── myproj
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── otherapp
    ├── __init__.py
    ├── __init__.pyc
    ├── models.py
    ├── static
    │   └── otherapp
    │       └── test.txt
    ├── tests.py
    └── views.py

vous voyez qu'il crée aussi les répertoires. Dans vos modèles, vous réfère maintenant à chaque fichier avec son "espace de noms" de l'application: {{ STATIC_URL }}/myapp/test.txt

23
répondu Burhan Khalid 2014-06-29 07:27:18

pour le exemples vous l'avez souligné à au travail, vos fichiers statiques doivent être dans un emplacement accessible à Django intégré staticfiles app.

Il y a quelques étapes pour ce faire:

tout D'abord, dans votre répertoire de projets (c.-à-d. à côté de votre manage.py fichier), vous aurez besoin de créer un répertoire pour héberger vos fichiers statiques. Appelez-le"static_files".

ensuite, vous devrez faire savoir à Django de regarder dans ce répertoire, en le spécifiant dans la liste des STATICFILES_DIRS dans votre settings.py fichier.

quelque Chose comme ceci:

STATICFILES_DIRS = [
    '/full/path/to/your/project/static_files/',
]

static_files directory, vous pouvez créer n'importe quelle structure que vous voulez, donc c'est là que votre css et js les répertoires pourraient aller.

après cela, vous devriez pouvoir utiliser le {{ STATIC_URL }} tag dans vos templates pour accéder à L'URL de base de vos fichiers statiques.

ainsi, par exemple, vous créez project/static_files/css/base.css, vous l'utiliseriez dans votre modèle comme ceci:

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

j'Espère que ça aide!

Modifier

Avec les paramètres par défaut de STATICFILES_FINDERS, Django devrait servir automatiquement tous les fichiers des répertoires listés dans votre STATICFILES_DIRS -- voir la documentation pour plus de détails.

Si cela ne fonctionne pas, quelques points à vérifier:

  • Avez-vous modifié votre STATICFILES_FINDERS paramètre autre que celui par défaut?
  • Est django.contrib.staticfiles dans votre liste de INSTALLED_APPS