Система статических файлов Django состоит из двух вещей:
Объединение статических файлов из нескольких (специфичных для приложения) каталогов в одно место, из которого они могут обслуживаться
Обслуживание этих файлов по HTTP
Вы хотите # 1, если у вас есть несколько статических файлов, расположенных в разных каталогах. Вы хотите # 2, если хотите видеть эти файлы во время использования сервера разработки. На производстве вы обычно пропускаете # 2, потому что цель # 1 - поместить файлы куда-нибудь, чтобы ваш веб-сервер мог получить к ним доступ.
Организация и сбор статических файлов
С учетом сказанного, вот как вы получите # 1:
settings.py:
# This is a filesystem path
STATIC_ROOT = '/path/to/my/project/collected-static-files/'
# This is a URL prefix
STATIC_URL = '/static/'
INSTALLED_APPS = (
...
'django.contrib.staticfiles',
...
)
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.static',
...
)
На этом этапе вы можете сделать несколько вещей:
Вы помещаете ваши статические файлы в каталог / static / под каждым из ваших приложений. Вот где Джанго будет искать их. Существует дополнительная настройка STATIC_DIRS
, которую вы можете использовать, если у вас есть статические файлы, которые находятся за пределами ваших приложений.
Вы можете запустить manage.py collectstatic
, чтобы Django просматривал все ваши приложения, находил все статические файлы и копировал их в /path/to/my/project/collected-static-files
(Вот почему этот параметр является путем к файловой системе.)
Вы можете использовать {{ STATIC_URL }}
в шаблонах для доступа к файлам.
Обслуживание статических файлов по HTTP
В режиме разработки на сервере разработки Django автоматически обслуживает файлы из каталога STATIC_ROOT
.
В основном, Django добавит обработчик URL для URL вида
/static/some-dir/some-file-name
И обслуживать контент с вашего жесткого диска, из пути к файловой системе
/path/to/my/project/collected-static-files/some-dir/some-file-name
На производстве это не произойдет автоматически, поэтому вам придется настроить веб-сервер так, чтобы он делал то же самое. (Просто не очень хорошая идея запускать все ваши статические файлы через полный конвейер обработки Django. Веб-сервер может сделать это намного эффективнее)