Ошибка "django.core.exceptions.SuspiciousFileOperation" возникает, несмотря на то, что все настроено правильно
В настоящее время я пытаюсь обслуживать все свои static
файлы через whitenoise
.
Как ни странно, сама функция работает отлично. Она ищет все каталоги с меткой static
во всех моих приложениях Django. Однако почему Django постоянно возвращает исключение django.core.exceptions.SuspiciousFileOperation
в моем трассировочном окне, и почему она возвращает только один css
файл.
Логика подсказывает, что, поскольку этот css
файл находится среди других .css
файлов в том же каталоге, Django, похоже, имеет какую-то личную вендетту против этого единственного файла.
На первый взгляд, то, что делает Джанго, совершенно нелогично.
Мои настройки следующие:
pip install whitenoise
settings.py
MIDDLEWARE = [
.....
"whitenoise.middleware.WhiteNoiseMiddleware",
.....
]
INSTALLED_APPS = [
....
'django.contrib.staticfiles',
....
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS = [
BASE_DIR / "static/libraries/assets/brand-assets",
BASE_DIR / "static/libraries/assets/images",
BASE_DIR / "static/libraries/assets/vectors",
BASE_DIR / "static/libraries/assets/videos",
BASE_DIR / "static/libraries/css",
BASE_DIR / "static/libraries/js",
BASE_DIR / "static/main",
BASE_DIR / "legal/static",
BASE_DIR / "blog/static",
BASE_DIR / "events/static",
BASE_DIR / "careers/static",
BASE_DIR / "media/static",
BASE_DIR / "static",
]
Мой каталог файлов выглядит следующим образом:
PROJECT NAME-|
Root-|
settings.py
careers-|
static-|
careers.css
media-|
static-|
media.css
blog-|
static-|
blog.css
legal-|
static-|
legal.css
static-|
main-|
xxx.css
xxx.css
libraries-|
css # <- location of the offending css file
js
assets-|
vectors
videos
images
brand-assets
"карьера", "медиа", "блог", "юридический" - это мои Django-приложения.
"Запрещенный" .css-файл, transparent-nav.css
, находится в каталоге BASE_DIR+/static/libraries/css
. После запуска python manage.py collectstatic
трассировка выглядит следующим образом:
django.core.exceptions.SuspiciousFileOperation: The joined path (C:\Users\xxx\xxx\<base_dir>\libraries\css\transparent-nav.css) is located outside of the base path component (C:\Users\xxx\OneDrive - xxx\<base_dir>\staticfiles)
Как вы видите, файл, вызывающий ошибку, НЕ находится вне компонента базового пути, потому что этот каталог был создан в файле settings.py
под STATICFILES_DIRS
, так почему же Django говорит мне, что это так? Это абсолютно бессмысленно.
Может ли это быть проблемой кэша?
Чтобы дать вам представление о том, насколько очевидно, что это сломано, я даже изменил:
STATIC_URL = 'static/'
до
STATIC_URL = 'dsfsjdfhjkdfhjksdfhjksd/'
Он даже не обратил внимания на то, что не существует файла с именем dsfsjdfhjkdfhjksdfhjksd/
, но все равно выбросил то же самое исключение.