Обслуживание статических файлов может быть достигнуто несколькими способами;вот мои примечания к себе:
- добавить каталог
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
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Это затем используется в шаблоне так:
# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Во время разработки, если вы используете django.contrib.staticfiles [ed: установлен по умолчанию], это будет выполнено автоматически runserver, когда для DEBUG установлено значение True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
При развертывании я запускаю collectstatic
и обслуживаю статические файлы с помощью nginx.
Документы, которые прояснили для меня всю путаницу:
STATIC_ROOT
Абсолютный путь к каталогу, где collectstatic будет собирать статические значения fфайлов для развертывания.
... это , а не место для постоянного хранения ваших статических файлов.Это следует делать в каталогах, которые будут найдены средствами поиска staticfiles, которые по умолчанию являются подкаталогами приложения «static /» и любыми каталогами, которые вы включаете в STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
Пространство имен статических файлов
Теперь мы можем избежать размещения наших статических файлов непосредственно в my_app / static / (вместо создания другого подкаталога my_app), но это будетна самом деле плохая идея.Django будет использовать первый найденный им статический файл, имя которого совпадает, и если бы у вас был статический файл с таким же именем в другом приложении, Django не смог бы различить их.Мы должны быть в состоянии указать Django на правильный путь, и самый простой способ убедиться в этом - использовать пространство имен.То есть, поместив эти статические файлы в другой каталог, названный для самого приложения.
https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS
Ваш проектвероятно, также будет иметь статические активы, которые не привязаны к конкретному приложению.Помимо использования каталога static / внутри ваших приложений, вы можете определить список каталогов (STATICFILES_DIRS) в файле настроек, где Django также будет искать статические файлы.
https://docs.djangoproject.com/en/1.10/howto/static-files/