Почему staticfiles не может найти или обслужить .css, используя FORCE_SCRIPT_NAME в docker

В режиме разработки (DEBUG=True), запущенном в docker на хосте, где обслуживается сайт с заранее прописанным путем, соответствующим ветке, я не могу заставить статические файлы работают.

Используется python 4.0.6

В settings.py у меня такие настройки:

DEBUG = True
BASE_DIR = Path(__file__).resolve().parent.parent # default generated
FORCE_SCRIPT_NAME = "https://pmdocker01d.pm.local:8443/bi-web-utils/ta0624/"
INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
STATIC_URL = 'static/'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

В моем html-файле:

{% load static %}
<html>
    <head>
    ...
    <link rel="stylesheet" href="{% static 'tableau_explorer/style.css' %}">

А мой css находится в:

django_root/tableau_explorer/static/tableau_explorer

На моей машине для разработки, как при запуске manage.py из шела, так и в dockerfile, это работает. В этой настройке у меня нет FORCE_SCRIPT_NAME.

Когда он находится на другом докер-хосте, сгенерированный HTML

<link rel="stylesheet" href="/static/tableau_explorer/style.css">

И я получаю 404 ошибку.

Если я изменюсь:

STATIC_URL = 'https://pmdocker01d.pm.local:8443/bi-web-utils/ta0624/static/'

Тогда вместо обычного 404 я получаю сообщение, что он получает HTML вместо css, потому что сервер возвращает это

Request Method: GET
Request URL:    http://https://pmdocker01d.pm.local:8443/bi-web-utils/ta0624/static/tableau_explorer/style.css
Using the URLconf defined in bi_web.urls, Django tried these URL patterns, in this order:

admin/
....
The current path, static/tableau_explorer/style.css, didn’t match any of these.

Для другого докер-хоста я попробовал добавить это в основной проект urls.py (не tableau/explorer/urls.py) Я попробовал добавить это и не смог увидеть никакой разницы:

from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [ . . . . ]

if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()

Если я просматриваю https://pmdocker01d.pm.local:8443/bi-web-utils/ta0624/static/

Я получаю сообщение об ошибке "Индексы каталога здесь не разрешены.", в то время как другие урлы, например, с окончанием "staticx/", просто говорят, что страница не найдена. Итак, Я думаю, что static делает что-то, но я не могу сказать, что что-то вообще собирается там, и не знаю, как это проверить.

Если я делаю shell-подключение к запущенному докер-хосту, кажется, что static находит то, что я ожидал:

$ python manage.py findstatic tableau_explorer/style.css
Found 'tableau_explorer/style.css' here:
  /code/tableau_explorer/static/tableau_explorer/style.css

Кто-нибудь знает сразу, что происходит, и может сказать мне "напечатайте это и это сработает?"

Если нет...

Мой вопрос теперь в том, что staticfiles должен делать с файлами в режиме разработки, и как он их обслуживает?

  • предполагается ли перехватывать любой запрос, начинающийся с "static/"

  • когда приложение запускается, собирает ли staticfiles .css файлы из папок "static" различных приложений, и помещает копии в дисковое хранилище, которое я могу проверить, или включить ведение журнала в развернутом виде? -- Должен ли я иметь возможность видеть файлы в определенной директории на работающем сервере?

  • имеет ли значение параметр BASE_DIR для staticfiles? Я использую то, что было сгенерировано

    manage.py createproject.

  • в статических файлах в настоящее время, должен ли он позаботиться о добавлении "static" в в урлы? Я думал, что мне не нужно модифицировать urls.py?

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