Почему Django 4.0 может получить доступ к статическим файлам только через STATICFILES_DIRS, а не STATIC_ROOT

Когда я использую STATIC_ROOT:

STATIC_ROOT = BASE_DIR / 'static'

Django не может получить доступ к статическим файлам и всегда возвращает для них 404 ошибку.

Но когда я использую STATICFILES_DIRS:

STATICFILES_DIRS = [
    BASE_DIR / "static",
]

Все работает хорошо. В чем проблема?

Я не понимаю, почему Django работает таким образом, я всегда думал, что STATIC_ROOT является правильным способом создания маршрута.

STATIC_ROOT - это место, куда команда collectstatic будет копировать все статические файлы.

Эта папка предназначена для использования в продакшене. Чтобы все статические файлы в вашем проекте (из ваших приложений, приложений сторонних разработчиков и т.д.) хранились в одной папке, и поэтому их было легко обслуживать в продакшене.


По умолчанию Django автоматически ищет статические файлы внутри каждого каталога приложения (это полезно при написании многократно используемых приложений). Настройка STATICFILES_DIRS позволяет вам определить дополнительные места для поиска статических файлов.

Кроме того, папка STATIC_ROOT и папка STATICFILES_DIRS не должны иметь одинаковые значения.

Вернуться на верх