Обслуговування статичних файлів можна досягти кількома способами; ось мої примітки до себе:
- додати
static/my_app/
каталог до my_app
(див. примітку щодо простору імен нижче)
- визначити новий каталог верхнього рівня та додати його до STATICFILES_DIRS у settings.py (зауважте, що
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Я віддаю перевагу першому способу та налаштуванню, близькому до способу, визначеного в документації , тому для того, щоб файл admin-custom.css
міг замінити пару стилів адміністратора, у мене є така установка:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Потім це використовується в шаблоні так:
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Під час розробки, якщо ви використовуєте django.contrib.staticfiles [ed: встановлено за замовчуванням], це буде зроблено автоматично сервером запуску, коли для DEBUG встановлено значення True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
Під час розгортання я запускаю collectstatic
та обслуговую статичні файли за допомогою nginx.
Документи, які прояснили всю плутанину для мене:
STATIC_ROOT
Абсолютний шлях до каталогу, в якому collestatic буде збирати статичні файли для розгортання.
... це не місце для постійного зберігання ваших статичних файлів. Ви повинні це робити в каталогах, які будуть знаходити шукачі staticfiles, які за замовчуванням є підкаталогами 'static /' програми та будь-якими каталогами, які ви включаєте в STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
Статичний простір імен файлів
Тепер ми могли б уникнути, розмістивши наші статичні файли безпосередньо в my_app / static / (а не створювати інший підкаталог my_app), але насправді це було б поганою ідеєю. Django буде використовувати перший статичний файл, який знайде, ім'я якого збігається, і якби у вас був статичний файл з однаковим ім'ям в іншій програмі, Django не зможе розрізнити їх. Нам потрібно вміти вказувати Джанго на потрібний, і найпростіший спосіб це забезпечити, розставляючи імена. Тобто, помістивши ці статичні файли в інший каталог, названий для самої програми.
https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS
У вашому проекті, ймовірно, також будуть статичні об’єкти, не пов’язані з певним додатком. На додаток до використання статичного / каталогу всередині ваших програм, ви можете визначити список каталогів (STATICFILES_DIRS) у своєму файлі налаштувань, де Django також шукатиме статичні файли.
https://docs.djangoproject.com/en/1.10/howto/static-files/
from django.conf import settings
про це, звичайно