Le service de fichiers statiques peut être réalisé de plusieurs manières ; voici mes notes à moi-même :
- ajouter un
static/my_app/
dans le répertoire my_app
(voir la note sur l'espacement des noms ci-dessous)
- définir un nouveau répertoire de premier niveau et l'ajouter à STATICFILES_DIRS dans settings.py (notez que
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Je préfère la première méthode, et une configuration proche de la méthode défini dans la documentation Ainsi, pour servir le fichier admin-custom.css
pour remplacer quelques styles d'administration, j'ai une configuration comme celle-ci :
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Il est ensuite utilisé dans le modèle de la manière suivante :
# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Pendant le développement, si vous utilisez django.contrib.staticfiles [ndlr : installé par défaut], cela sera fait automatiquement par runserver lorsque DEBUG est à True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
Lors du déploiement, je lance collectstatic
et servir les fichiers statiques avec nginx.
Les documents qui m'ont permis d'éclaircir toute la confusion :
STATIC_ROOT
Le chemin absolu vers le répertoire où collectstatic collectera les fichiers statiques pour le déploiement.
...c'est pas un endroit où stocker vos fichiers statiques de façon permanente. Vous devez le faire dans des répertoires qui seront trouvés par les outils de recherche de staticfiles, qui par défaut sont les sous-répertoires 'static/' app et tous les répertoires que vous incluez dans STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-Root
Espacement des noms de fichiers statiques
Nous pourrions peut-être nous en sortir en plaçant nos fichiers statiques directement dans my_app/static/ (plutôt que de créer un autre sous-répertoire my_app), mais ce serait en fait une mauvaise idée. Django utilisera le premier fichier statique dont le nom correspond, et si vous aviez un fichier statique portant le même nom dans une autre application, Django serait incapable de les distinguer. Nous devons être capables d'indiquer à Django le bon fichier, et la manière la plus simple de s'en assurer est de les nommer. C'est-à-dire en plaçant ces fichiers statiques dans un autre répertoire nommé pour l'application elle-même.
https://docs.djangoproject.com/en/1.10/howto/static-files/
FICHIERS_STATIQUES
Votre projet comportera probablement aussi des éléments statiques qui ne sont pas liés à une application particulière. En plus d'utiliser un répertoire static/ dans vos applications, vous pouvez définir une liste de répertoires (STATICFILES_DIRS) dans votre fichier de configuration où Django cherchera également des fichiers statiques.
https://docs.djangoproject.com/en/1.10/howto/static-files/