Админ DJango обслуживает статические файлы из /media вместо /static
Когда я запускаю свое приложение django в режиме производства (т.е. без DEBUG), мой администратор сайта пытается обслуживать статические файлы из "/media" вместо "/static", что приводит к 404s
Это то, что он пытается обслужить.
GET https://<domain>/media/admin/css/base.css
Но если я вручную введу
https://<domain>/static/admin/css/base.css
Он правильно обслуживает статический файл. Таким образом, мой "collectstatic" работает нормально, но почему-то админка сайта пытается обслуживать из /media.
Я не понимаю, какие настройки могут вызвать это. Все, что я ищу по этому поводу, относится к периоду до django 1.4, где была специальная настройка для admin media url. Кроме этого, я не вижу, чтобы у кого-то еще была такая проблема.
Я в общих чертах следую https://github.com/cookiecutter/cookiecutter-django и сейчас нахожусь на последней версии django. Я не уверен, что еще нужно искать
Выбор настроек (предположительно несущественные опущены)
#config/settings/base.py
DJANGO_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.sites",
"django.contrib.messages",
"django.contrib.staticfiles",
# "django.contrib.humanize", # Handy template tags
"django.forms",
]
# STATIC
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#static-root
STATIC_ROOT = str(ROOT_DIR / "staticfiles")
# https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = "/static/"
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS
STATICFILES_DIRS = [str(APPS_DIR / "static")]
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
# MEDIA
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = str(APPS_DIR / "media")
# https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = "/media/"
# TEMPLATES
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#templates
TEMPLATES = [
{
# https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATES-BACKEND
"BACKEND": "django.template.backends.django.DjangoTemplates",
# https://docs.djangoproject.com/en/dev/ref/settings/#dirs
"DIRS": [str(APPS_DIR / "templates")],
# https://docs.djangoproject.com/en/dev/ref/settings/#app-dirs
"APP_DIRS": True,
"OPTIONS": {
# https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"moment.users.context_processors.allauth_settings",
],
},
}
]
--
#config/settings/production.py
from .base import * # noqa
from .base import env
STATICFILES_STORAGE = "django.core.files.storage.FileSystemStorage"
COLLECTFAST_STRATEGY = "collectfast.strategies.filesystem.FileSystemStrategy"
ADMIN_URL = env("DJANGO_ADMIN_URL")
# Collectfast
# ------------------------------------------------------------------------------
# https://github.com/antonagestam/collectfast#installation
INSTALLED_APPS = ["collectfast"] + INSTALLED_APPS # noqa F405
Обратите внимание, что большинство настроек статических файлов объявлены в моем файле base.py, который включается, когда я запускаю его в режиме "отладки" с помощью config/settings/local.py. И это работает нормально. Только в производственном режиме он пытается обслуживать статические файлы из /media
Оказалось, что это было вызвано https://github.com/antonagestam/collectfast, предоставляемым шаблоном cookiecutter, который я использовал. По умолчанию он пытался использовать s3 в качестве места расположения статических файлов, а я настроил его на использование локальной файловой системы. Возможно, в этой конфигурации было что-то не так. Я не стал разбираться дальше. Удаление пакета collectfast сработало