Ошибка "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/, но все равно выбросил то же самое исключение.

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