Django - не могу найти мои статические файлы даже после ручной корректировки пути
Я столкнулся с проблемой, которую даже после вечера попыток я так и не смог решить.
Для моего проекта у меня есть один статический каталог, и я включил туда файлы css для страницы входа в систему. Тем не менее, когда я пытаюсь загрузить веб-страницу, я получаю ошибку 404.
Когда я пытаюсь найти файлы с помощью команд "findstatic" или "collectstatic", файлы пропускаются. Это как "статический" каталог, невидимый для django. Я даже напрямую копирую папку "Логин" в "static_root", но даже тогда программа Django не смогла найти файлы. У кого-нибудь есть идеи, что я делаю не так?
Папка моего проекта выглядит так:
* MPS (main folder)
* Scraper (app)
* Database (app)
* Templates
* Static_root
* Static
* Login
* css
* style.css
Мой settings.py был настроен так:
STATIC_URL = 'static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root/')
И я вызываю статические файлы в шаблоне с помощью следующего кода:
{% load staticfiles %}
(...)
<link rel="stylesheet" href="{% static 'login/css/style.css' %}">
1 ответ
Структура папок вашего проекта выглядит немного иначе, чем в большинстве проектов Django. Традиционно это будет выглядеть примерно так:
myproject/
urls.py
wsgi.py
settings.py
myapp/
static/
myapp/
css/
style.css
js/
index.js
manage.py
Обратите внимание, что статические файлы приложения myapp
находится внутри подпапки, называемой так же, как папка приложения. Это позволяет легко именовать файлы, как вы можете прочитать больше в документации.
Теперь мы можем избежать размещения наших статических файлов непосредственно в my_app/static/ (вместо создания другого подкаталога my_app), но на самом деле это будет плохая идея. Django будет использовать первый найденный им статический файл, имя которого совпадает, и если бы у вас был статический файл с таким же именем в другом приложении, Django не смог бы различить их. Нам нужно уметь указать Django на правильный путь, и самый простой способ убедиться в этом - использовать пространство имен. То есть, поместив эти статические файлы в другой каталог, названный для самого приложения.