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 на правильный путь, и самый простой способ убедиться в этом - использовать пространство имен. То есть, поместив эти статические файлы в другой каталог, названный для самого приложения.

Другие вопросы по тегам