Почему 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?