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?
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 myapp
INSTALLED_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
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 deINSTALLED_APPS