Сервер разработки django не обслуживает статические файлы

Тот же вопрос, что и этого 7-летнего, но решения не помогают плюс Я использую django 3, поэтому, на мой взгляд, это явно не дубликат.

Я точно следовал документации Django о статических файлах.

файл настроек:

STATIC_URL = '/static/'
DEBUG = True

Структура папки:

---my_project
------my_project
------app1
------static
---------css
------------mystyle.css

Шаблон:

  {% load static %}
  <link rel="stylesheet" href="{% static "css/mystle.css" %}">

При переходе на сайт получаю 404 Not Found. Ссылка указывает на правильный каталог:

http://127.0.0.1:8000/static/css/mystyle.css

При дальнейшем поиске и просмотре документации (которая на мой взгляд неясна) я также нашел настройку STATIC_ROOT и установил ее соответственно, но это тоже не помогло.

#BASE_DIR = path to project dir
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Что я делаю неправильно?


person beginner_    schedule 26.03.2020    source источник
comment
Вы добавили urlpatterns = [ # ... остальная часть вашего URLconf находится здесь ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)   -  person bmons    schedule 26.03.2020
comment
см. мой ответ. Я только что понял это. На мой взгляд, документация сбивает с толку и не показывает хороший, полный пример того, какой должна быть настройка.   -  person beginner_    schedule 26.03.2020
comment
Забавно, та же опечатка, что и здесь ком/вопросы/60859511/   -  person Ivan Starostin    schedule 26.03.2020


Ответы (1)


Попытка решить это часами, а затем, когда вы нажимаете «Отправить» в сообщении, вы находите решение. Для меня документация django неясна и сбивает с толку, поэтому я добавляю ответ, а не удаляю свой вопрос.

Ваш проект, вероятно, также будет иметь статические ресурсы, которые не привязаны к конкретному приложению. Помимо использования каталога static/ внутри ваших приложений, вы можете определить список каталогов (STATICFILES_DIRS) в файле настроек, где Django также будет искать статические файлы.

С ударением на «может» и «также». Это означает, что этот параметр не нужен и STATIC_URL достаточно. Но это не так. Это абсолютно необходимо, иначе вы получите 404.

Это приводит к следующим настройкам:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
DEBUG = True

чтобы заставить его работать.

person beginner_    schedule 26.03.2020
comment
STATICFILES_DIRS правильно описан в документации: это необязательный дополнительный список каталогов, в которых нужно искать и собирать информацию STATIC_ROOT. В показанной конфигурации у вас не определен STATIC_ROOT, что является ошибкой. В вашем случае вам нужен только STATIC_ROOT. STATIC_URL — это не папка — это корневой URL-адрес, по которому ваши файлы можно запрашивать через Интернет. - person Ivan Starostin; 26.03.2020
comment
Только со STATIC_ROOT не работает. На самом деле в документации, на которую я ссылаюсь, это не упоминается для разработки, а только для развертывания. Документация может работать для тех, кто знаком с django, но, поскольку я новичок в django, это очень запутанно, и не показан пример со всеми настройками, которые действительно работают. Если я опускаю STATICFILES_DIRS, это просто не работает. - person beginner_; 26.03.2020
comment
Тогда у вас ошибка где-то в другом месте. STATICFILES_DIRS абсолютно не требуется для работы статических файлов. - person Ivan Starostin; 26.03.2020