Это наверное глупый вопрос, но он просто не щелкает в моей голове.
В Django принято помещать все ваши статические файлы (например, css, js), относящиеся к вашему приложению, в папку с именем static . Итак, структура будет выглядеть так:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
У mysite/settings.py
меня есть:
STATIC_ROOT = 'staticfiles'
Итак, когда я запускаю команду:
python manage.py collectstatic
Он создает папку с именем staticfiles
на корневом уровне (в том же каталоге, что и myapp/
)
какой в этом смысл? Разве это не просто создание копии всех моих статических файлов?
Статические файлы Django могут находиться во многих местах. Файл, который обслуживается,
/static/img/icon.png
может поступать из многих мест . По умолчанию:FileSystemFinder
буду искатьimg/icon.png
в каждом изSTATICFILES_DIRS
,AppDirectoriesFinder
будет искатьimg/icon.png
воstatic
вложенной папке в каждом из вашихINSTALLED_APPS
. Это позволяет библиотекам, таким как Django Admin, добавлять свои собственные статические файлы в ваше приложение.Теперь: это работает, только если вы запускаете
manage.py runserver
с DEBUG = 1. Когда вы начнете работать, процесс Django больше не будет обслуживать статические ресурсы. Было бы неэффективно использовать Django для их обслуживания, для этого есть более специализированные инструменты.Вместо этого вы должны сделать что-то вроде этого:
static
каталог где-нибудь на вашем веб-сервере или стороннее хранилище файлов)/static/*
непосредственно из этого каталога и перенаправления любых других запросов в Django.collectstatic
- это готовый сценарий, который подготавливает этот каталог для вас, чтобы вы могли напрямую подключить его к сценарию развертывания.источник
В производственной установке вы хотите иметь постоянные URL-адреса. URL-адрес не изменяется, если не изменяется содержимое файла.
Это сделано для того, чтобы клиенты не имели неправильную версию файла CSS или JS на своем компьютере при открытии веб-страницы из Django. Django staticfiles обнаруживает изменения файлов и соответственно обновляет URL-адреса, так что при изменении файла CSS или JS веб-браузер загружает новую версию.
Обычно это достигается добавлением хеша MD5 к имени файла во время
collectstatic
выполнения.Изменить: также см. Соответствующий ответ для нескольких приложений.
источник
settings.STATICFILES_STORAGE
умолчаниюStaticFilesStorage
, поэтому MD5 сработает только после того, как вы, например, установите егоManifestStaticFilesStorage
, я прав?Это полезно, когда на сайте есть несколько приложений django.
collectstatic
затем соберет статические файлы из всех приложений в одном месте, чтобы их можно было использовать в производственной среде.источник