Почему collectstatic не будет копировать мои статические файлы?
У меня есть каталог MyApp/static/MyApp
Когда я запускаю. /manage.py collectstatic, я ожидаю, что каталог MyApp будет скопирован в STATIC_ROOT, но он не
У меня также есть DownloadedApp/static/DownloadedApp и его скопировано в STATIC_ROOT.
Что мне не хватает?
Ответы
Ответ 1
Каковы STATIC_ROOT
, STATICFILES_FINDERS
и STATICFILES_DIRS
в settings.py
?
Когда выполняется collectstatic
, значение по умолчанию STATICFILES_FINDERS
django.contrib.staticfiles.finders.FileSystemFinder
будет собирать ваши статические файлы из любых путей, которые у вас есть в STATICFILES_DIRS
.
Другое значение по умолчанию STATICFILES_FINDERS
django.contrib.staticfiles.finders.AppDirectoriesFinder
будет выглядеть в папке /static/
любых приложений в вашем INSTALLED_APPS
.
Все статические файлы, которые будут найдены, будут помещены в указанный каталог STATIC_ROOT
.
Посмотрите эту ссылку на сборные документы
И эта ссылка объясняет различные статические настройки в settings.py
Вы также можете использовать python manage.py findstatic
, чтобы посмотреть, какие каталоги collectstatic
будут выглядеть.
Ответ 2
Это случилось со мной, и я случайно поставил каталог статических файлов приложения в файл .gitignore. Так что на моей локальной машине он собрал все, что было хорошо, но в производстве на самом деле отсутствовали статические файлы (gitignored).
Ответ 3
Это случилось со мной, потому что, исследуя ошибку, возникающую в определенные даты, меняли дату и время моего компьютера.
Следовательно, это нарушало такие вещи, как collectstatic, а также история моего браузера.
Не изменяйте дату и время вашего компьютера.
Ответ 4
У меня сложилось впечатление, что сравнение будет основано на содержании. Оказалось, что на основе даты. Так что не связывайтесь с вашими файлами после collecstatic
.
Ответ 5
Один быстрый обходной путь, хотя это не устраняет и не объясняет ПОЧЕМУ это происходит, заключается в следующем:
- перейдите в каталог файлов вашего проекта и переименуйте папку "static" вашего проекта во что-то еще, например "static-old"
- создайте новую пустую папку с именем "static" в каталоге вашего проекта
- теперь, если вы запустите
python manage.py collectstatic
он увидит, что в вашей статической папке ничего нет, и скопирует ВСЕ статические файлы.
Ответ 6
просто сделайте это и сделайте то же самое соглашение об именах
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
Статическая директория содержит все ресурсы вашего проекта
Каталог assets создаст автоматически, когда вы запустите этот cmd
python3 manage.py collectstatic
это скопирует все содержимое статической папки в папку ресурсов
надеюсь это поможет :)