Статические файлы могут сбивать с толку в Django. Постараюсь объяснить как можно проще...
STATIC_ROOT
Это каталог, из которого вы должны обслуживать статические файлы в рабочей среде.
STATICFILES_DIRS
Это каталог, из которого вы должны обслуживать статические файлы в разработке.
STATIC_ROOT и STATICFILES_DIRS не могут указывать на один и тот же каталог.
Django — это модульный фреймворк. Некоторые модули приложения содержат собственные шаблоны, css, изображения и JavaScript. Django admin — одно из таких приложений. Django расширяет эту модульность для приложений, которые вы создаете, используя разные каталоги для статических файлов при разработке и производстве.
Когда DEBUG = True
и вы включили django.core.staticfiles
в свой INSTALLED_APPS
, Django будет обслуживать файлы, расположенные в кортеже STATICFILES_DIRS
, используя путь STATIC_URL
в качестве отправной точки.
В производстве эта ответственность должна быть возложена на Nginx, Apache, CloudFront и т. д. Когда DEBUG = False
, Django не будет автоматически обслуживать статические файлы.
Когда вы бежите:
$ python manage.py collectstatic
Файлы, указанные в STATICFILES_DIRS, копируются в STATIC_ROOT для развертывания.
Итак, чтобы ответить на ваш вопрос, я бы сделал следующее:
Создайте еще один каталог для хранения ваших статических файлов в процессе разработки и добавьте этот путь в свой STATICFILES_DIRS. Я обычно называю эту папку «static-assets». Он может находиться на том же уровне, что и ваш существующий «статический» каталог.
Установите STATIC_ROOT на путь к вашему существующему «статическому» каталогу.
Если вы внимательно посмотрите на путь, который возвращает 404 на вашем снимке экрана, путь к изображению указан как: /static/img/logo.png, но ваш каталог для изображений: /static/image/
Поэтому дважды проверьте путь к изображению, чтобы убедиться, что вы указываете на правильный каталог.
person
Brandon
schedule
01.04.2014
manage.py runserver
или у вас есть подходящий веб-сервер? Django обычно вообще не обслуживает статические файлы, и вам нужно настроить свой веб-сервер для их обслуживания напрямую, за исключением случаев, когда вы запускаетеmanage.py runserver
, который действительно обслуживает статические файлы (поскольку у вас нет веб-сервера в этом случае взять на себя эту ответственность) - person lanzz   schedule 28.03.2014