Почему джанго не видит css файл

Обновлено: 05.07.2024

Я все еще новичок в django, и у меня проблемы с работой CSS.
Я следил за направлением по ссылке: учебник по Django Static Link, по обработке статических файлов. Но он все еще не работает.

Настройки

index.html

И организация каталогов

Большое вам спасибо, ваша помощь и время очень ценятся!

Чтобы Django обслуживал статические файлы, вы должны убедиться, что у вас есть пара настроек.

STATIC_URL

Этот параметр указывает, на какой URL должны отображаться статические файлы. Вы уже сделали это.

STATICFILES_DIRS

Это указывает на все папки в вашей системе, где Django должен искать статические файлы. Идея состоит в том, что в вашем проекте может быть несколько приложений, и каждому приложению может потребоваться различный набор статических файлов. Таким образом, в организационных целях каждое приложение может содержать static каталог, в котором будут храниться только статические файлы. Итак, у Джанго должен быть способ узнать, где находятся эти каталоги. Вот для чего этот параметр.

STATIC_ROOT

Этот параметр указывает, куда Django будет копировать все статические файлы, а не где статические файлы уже находятся. Идея состоит в том, что после того, как вы оставите разработку в производстве, Django больше не сможет обслуживать статические файлы из-за проблем, которые я здесь не расскажу (об этом в статье). Однако для производства все статические файлы должны находиться в одном каталоге, а не во многих, как указано в STATICFILES_DIRS . Таким образом, этот параметр указывает каталог, в который Django будет копировать все статические файлы из всех файлов в STATICFILES_DIRS , выполнив следующую команду:

Обратите внимание, что это необходимо только после STATICFILES_DIRS а также что указанный здесь каталог не может совпадать с любым каталогом, указанным в STATICFILES_DIRS .

Urls.py

При разработке Django для обслуживания ваших статических файлов вы должны включить статические URL в ваш urls.py:

После того, как вы выполните все вышеперечисленные действия, ваши статические файлы должны быть обработаны, пока у вас есть DEBUG = True . Похоже, что из вышеприведенного списка вы завершили только STATIC_URL . Также обратите внимание, что все шаги, которые я описал выше, находятся в документах, которые вы указали в своем вопросе (ссылка). Это может быть немного запутанным в начале, но если вы прочитаете это пару раз, это станет яснее.

альтернативный текст

Django не обслуживает статические файлы самостоятельно. Вы должны указать ему, где находятся файлы.

Поскольку вы используете версию для разработки, вам понадобится специальный документ для разработчиков с инструкциями по статическим файлам . Ссылка Адама приведет вас к версии 1.2.

Хороший ответ, но теперь он устарел и отсутствует в settings.py. Читайте ниже, чтобы узнать больше о последних решениях. У меня такая же ошибка, но во Flask я помещаю свой css в статическую папку. И используйте jinj2 2 suntax, т.е. <>, но все же на моем ноутбуке у меня есть эта ошибка. Я принудительно обновил страницу, но проблема все еще существует. Пожалуйста, помогитеПосле настройки STATIC_ROOT и STATIC_URL вам, возможно, придется запустить

Это также работает на 1.5.2. Мне не нужно было изменять или добавлять какие-либо файлы или коды Может быть, полезно для кого-то: вы должны использовать одно STATIC_ROOT и то же имя для и STATIC_URL , например: я объединил «staticfiles» и «static» , использовал STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")" и STATIC_URL="/static/" . Мое приложение работало нормально, но файлы администратора найти не удалось. так что измените его как на «staticfiles», так и на «static»

ADMIN_MEDIA_PREFIX устарел, используйте STATIC_URL вместо него. Настройка STATIC_URL = '/static/' в settings.py должна работать. Пытаться:

Работает на Django 1.4 pre-alpha SVN-16920.

У меня это тоже не работает. Я замечаю, что если я перемещаю (вручную) папку static/admin внутри, static/css/ я могу получить доступ к файлам css. Таким образом, кажется, что я могу получить доступ к файлам css, только если они находятся внутри, static/files но collectstatic не помещает их туда. Конечно, перемещение папки вручную просто не работает, потому что шаблоны продолжают указывать на static/admin . У меня сработало при попытке запустить интерфейс администратора, созданный с помощью Django v1.2, протестированный на 1.3, а затем повторно развернутый на v1.4. Запуск Ubuntu 12.04 LTE

Затем, в главе 6, Книга предлагает читателю раскомментировать 4 из этих 6 строк - «обратите внимание, что мы закомментировали эти четыре записи INSTALLED_APPS в главе 5. Раскомментируйте их сейчас».

Но строка statcifiles - это то, что нужно для восстановления CSS на странице администратора, поэтому раскомментируйте это 'django.contrib.staticfiles',

Раскомментирование django.contrib.staticfiles в файле settings.py, как было предложено выше, тоже помогло мне. 'django.contrib.staticfiles' должен присутствовать по умолчанию в вашем файле settings.py в INSTALLED_APPS. Спасибо Крису за ваше предложение. Попал сюда и из Книги Джанго. Это односимвольное удаление делает это.

Затем (из вашего статического каталога):

Надеюсь, это кому-то поможет . на эту тему много веток. :(

это ответ работает как шарм, спасибо taylor. молодец

В /project_name/project_name/settings.py вам нужно установить , STATIC_URL чтобы сказать , что ваш сайт URL , чтобы использовать для статических файлов.

Затем установите STATIC_ROOT какую-то папку в вашей файловой системе, которая не совпадает с любой из ваших каталогов, перечисленных в STATICFILES_DIRS списке.

Как только он STATICFILES_ROOT будет установлен, вы запустите его python manage.py collectstatic из каталога проекта.

Это скопирует все статические файлы администратора и все файлы в любые другие папки, перечисленные в STATICFILES_DIRS списке. По сути, это помещает все ваши статические файлы в одно место, чтобы вы могли переместить их в CDN при развертывании сайта. Если вы похожи на меня и у вас нет CDN, у вас есть два варианта:

  1. Добавьте указанную вами папку STATIC_ROOT в STATICFILES_DIRS список. Это позволит поисковикам статических файлов в django найти все статические файлы.
  2. Переместите всю папку со статическими файлами в другое место в файловой системе и укажите STATICFILES_DIRS это новое местоположение.

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

ОБНОВЛЕНИЕ: я только что столкнулся с этой проблемой, и этот метод не совсем сделал то, что я думаю, вы хотите. Что в итоге сработало для меня, так это то, что после запуска collectstatic я просто скопировал статические файлы администратора, которые он поместил в STATICFILES_ROOT каталог, который я использовал для своих собственных статических файлов. Это решило проблему для меня.

Здравствуйте! Помогите, пожалуйста, 3 часа уже парюсь.

enter image description here

Сейчас в settings.py у меня прописано:

Все варианты из инструкции по работе со статическими файлами я также перепробовал (STATICFILES_DIRS, STATIC_ROOT, STATICFILES_FINDERS, collectstatic). Ничего не помогает.

Смотрел в FireFox + FireBug. CSS файлы (base.css и login.css) с сервера загружаются - 2-а GET успешно отправляются, и сервер возвращает эти файлы. Но при просмотре содержимого файлов в FireBug отображается пустое содержимое.

В чём дело? Подскажите, пожалуйста.

А вы случайно не создавали в проекте папку admin?

А вы случайно не создавали в проекте папку admin?

Нет, папку admin в проекте не создавал. Создал лишь одно новое приложение с именем page. Таким образом, в проекте есть только папка page.

Вообще странно, облазил весь инет, такая проблема встречается, но лишь на реальных веб-серверах (apache, nginx). Почти у всех она успешно решается с помощью добавления инструкций в settings.py касательно статических файлов. Такое ощущение, что на встроенном в django локальном web-сервере у всех всё работает без проблем с дефолтовыми настройками.

Я учусь по достаточно свежей книге Дронова (Django: практика создания Web-сайтов на Python), так в ней автор тоже ничего не пишет о каких-то дополнительных настройках. Вероятно, всё должно сходу работать без проблем. Странно, похоже какой-то уникальный косяк именно у меня.











Да, DEBUG = True. На всякий случай ниже пишу все настройки settings.py

Добрый день. Решили проблему?











Внимательно читаем документацию, особенно часть, где описывается работа в отладочном режиме.

Если ничего не помогает, прочтите документацию, наконец!

К сожалению, так и не решил.

Внимательно читаем документацию, особенно часть, где описывается работа в отладочном режиме.

Неоднократно перечитал и всё перепробовал, но ничего не получается. В settings.py добавил:

В urls.py добавил:

В корневой папке проекта лежит папка static со всеми статическими файлами для админки. Файлы сгенерированы с помощью утилиты collectstatic. В ней подпапка admin, в которой подпапки с содержимым для css, js, img. Но css при отображении страницы не применяются. Прикол в том, что они вроде бы грузятся. Отладочный сервер выводит инфу, что css admin/css/base.css загружен (200), но почему-то эти файлы либо не применяются либо оказываются пустыми. Перепробовал различные виды комбинаций настроек (включая те, что закомментированы). Ничего не помогает. Пробовал смотреть в разных браузерах - везде одно то же.











Вообще при DEBUG=True ничего не нужно в urls.py добавлять. Просто добавить в INSTALLED_APPS django.contrib.staticfiles . И статику собирать не нужно. Её собирают, чтобы раздавать на сервере.

Вообще при DEBUG=True ничего не нужно в urls.py добавлять. Просто добавить в INSTALLED_APPS django.contrib.staticfiles. И статику собирать не нужно. Её собирают, чтобы раздавать на сервере.

Действительно, в доке написано, что не нужно. Просто у меня не работают CSS при открытии страницы /admin/ в любых вариантах настроек. Поэтому и пробую уже всё, что угодно. В INSTALLED_APPS django.contrib.staticfiles есть, но в моём случае этого оказывается недостаточно. Интересно, кто-нибудь реально пробовал под windows отладочный сервер запустить и чтобы у него css для /admin/ подгружались? Может у меня просто какой-то оригинальный специфичный косяк, не связанный с django? Если такие есть - откликнитесь, пожалуйста.

Добрый день. Решили проблему?

Я запускал девсервер на винде 7, django 1.9 и python 3.4. Вам не нужно делать collectstatic, поэтому папки эти можете удалить. collectstatic нужен для сбора статики для боевого сервера. А у вас вообще странная ситуация, потому что все должно работать. Попробуйте сделать следующее. Укажите в настройках setings.py следующее:

Вот именно, что все должно работать. Проблема, мне кажется, в том как отдается статика.

Нет, не решил. Пробовал тоже и с новыми версиями (python 3.5.1 , django 1.9.6) - не работает. CSS файлы передаются (видно в FireBug), но почему-то не применяются.



Зачем убивать время на переустановку python и django? Что на них грешить-то? Практичней потратить это время на прочтение документации пока не осенит в чем дело.



Нет, не решил. Пробовал тоже и с новыми версиями (python 3.5.1 , django 1.9.6) - не работает. CSS файлы передаются (видно в FireBug), но почему-то не применяются.

Тут уж точно python и django не при чем. Они свою работу сделали. Шаблон отрендерен, CSS подгружен.



Под виндой можно геморой получать, а не питон изучать. Ставьте виртуалку с линуксом (убунтой) и будет вам счастье. Вся документация написана под юникс окружение.

Зачем убивать время на переустановку python и django? Что на них грешить-то? Практичней потратить это время на прочтение документации пока не осенит в чем дело.

Да, вроде, уже всё перечитал и перепробовал, поэтому это уже не катит. А переустановил, т.к. vadiq написал, что у него вся эта кухня работала с django 1.9. Кроме vadiq никто пока здесь не писал, что у него без проблем работал отладочный сервер под Win с css, поэтому я и решил на всякий случай синхронизировать версию django с ним.



Да, вроде, уже всё перечитал и перепробовал, поэтому это уже не катит.

Вот самый дельный совет, в этом случае, от urslan если хотите получить результат без геммороя -

Ставьте виртуалку с линуксом (убунтой) и будет вам счастье.

Тут и все сказано, что в основном все под NIX ами сидят.

Кроме vadiq никто пока здесь не писал, что у него без проблем работал отладочный сервер под Win с css

Попробуйде в urls.py внести изменения: Измените url(r'^admin/', include(admin.site.urls)), на

если нужно выше добавьте

должно решить проблему.

После обновления django до 1.9.6 в urls.py у меня именно это и есть. В старой версии (1.8) было c include. Каталог с проектом был на рабочем столе, но для проверки я создал рабочий каталог с именем "zzz" в корне диска C. Результат тот же самый. Файлы base.css и login.css проверил, они не пустые. Дело в том что FireBug на вкладке сеть показывает два успешных запроса GET - для base.css и для login.css. При этом там же можно посмотреть содержимое ответа запроса (например, для base.css) - там именно то содержимое, которое лежит в файле C:\Users\Serg\Envs\djangostudy\Lib\site-packages\django\contrib\admin\static\admin\css\base.css. При этом, меняя содержимое файла на диске, я могу видеть, что содержимое ответа запроса GET тоже меняется. Но когда я в том же Firebug щёлкаю вкладку CSS, я вижу там два файла - base.css и login.css - щёлкаю по этим файлам - там пусто. Этот косяк у меня во всех браузерах и только с админкой django сайта. Ранее я такого не встречал. На всякий случай ещё раз публикую текущие варианты settings.py и urls.py (хотя я пробовал уже огромное количество других вариантов):

вставьте это вместо

Не факт, что решит проблему. Но я подозреваю, что у вас стили не доходят до html шаблона. т.е. в get запросе получаем инфу, а на самой странице она уже не отображается. Может проблема в базовом шаблоне админки? Нужно ковыряться и искать.

Если уже не помогает ничего, и вы именно на винде хотите мучаться, то уже попробуйте вручную организовать раздачу статики на дев-сервере при помощи django.contrib.staticfiles.views.serve(). Это альтернатива django.contrib.staticfiles. А вообще, рекомендую на линукс перейти. Там в разы удобнее и проще работать с django.



А в логах джанго что пишется?

Так в порядке бреда. Не через nginx тестовый сервер запросы принимает?

enter image description here

Поковырялся в очередной раз. Выяснил точную причину проблемы, но пока не знаю как эту проблему устранить. Вот причина: CSS - файлы (base.css и login.css) успешно приходят в браузер с сервера, но браузеры при отображении страницы используют не полученные css файлы, а свои системные (html.css и др.). Причину такого поведения браузеров мне помогли выяснить инструменты разработчика в Chrome (до этого я использовал только FireBug в FireFox). Они выдали предупреждение, которое FireBug не выдаёт. Скриншот предупреждения ниже:



А что у вас в шаблоне страницы написано?

Вот вам для примера.

А что у вас в шаблоне страницы написано?

enter image description here

В шаблоне base.html админки написано всё как надо. Я это проверил. FireFox это подтверждает (скриншот итогового html в FireBug ниже:)



В порядке бреда (но часто достает в Винде) кодировка файлов СSS отличается от UTF8?

В порядке бреда (но часто достает в Винде) кодировка файлов СSS отличается от UTF8?

Нет, как я понимаю, в отличие от html для CSS файлов кодировка не указывается, т.к. она не играет значения. В css используются только ASCII символы, а они в любой кодировке имеют одинаковые значения. Моя проблема в интернете уже не раз обсуждалась, но правильного решения почти никто не предлагал. Нашёл одного человека на одном форуме, который для себя эту проблему решил. Вот чего он написал:

В моей версии django уже всё поменялось, поэтому это решение уже не актуально, тем более, что оно весьма корявое. Я предполагаю, что это, возможно, косяк какой-то библиотеки в составе Python под Windows нежели косяк django. В документации по django 1.9 в разделе, посвящённому static файлам, есть такой текст:

alt text

Django не обслуживает статические файлы самостоятельно. Вы должны сказать ему, где находятся файлы.

The ADMIN_MEDIA_PREFIX в settings.py укажет Джанго в нужном месте.

Так как вы используете версию разработки, вы хотите dev-специфический документ для статических файлов how-to. Ссылка Адама приведет вас к версии 1.2.

после настройки STATIC_ROOT и STATIC_URL , возможно, вам придется запустить

ADMIN_MEDIA_PREFIX теперь устарело, используйте . Установка STATIC_URL = '/static/' in settings.py надо делать свою работу. Попробуйте:

и затем:

работает на Django 1.4 pre-alpha SVN-16920.

  1. добавьте папку, которую вы установили как STATIC_ROOT до STATICFILES_DIRS список. Это позволит поисковикам staticfiles в django найти все статические файлы.
  2. переместите всю папку статических файлов в другое место в вашей файловой системе и направьте STATICFILES_DIRS включить новое место.

Если вы используете сервер Apache для размещения вашего сайта django, вам нужно убедиться, что статический псевдоним указывает на ваш /каталог на сайт/site_media/static/. Если ваши статические файлы находятся в Каталоге / для сайта / site/site_media/ static/, предыдущая конфигурация псевдонима Apache не будет работать.

обеспечить 'django.contrib.staticfiles' в своем INSTALLED_APPS в вашем settings.py

в дополнение ко многим другим полезным ответам, у меня была проблема, которая еще не была замечена. После обновления с Django 1.3 до 1.6 в моем каталоге статических файлов была сломана символическая ссылка на статические файлы администратора django.

мой settings.py был настроен с:

по данным ответ,

Django теперь будет ожидать, чтобы найти статические файлы администратора под URL /администратор./

I была символическая ссылка /var/www/static/my-dev/admin , который был установлен в:

это место больше не существует в django 1.6, поэтому я обновил ссылку:

и теперь мой админ работает правильно.

обходной путь, который я нашел: изменение типа mimetype для обслуживания путем добавления следующих строк в веб-приложение django manage.py файл:

Примечание: работал для меня с Django 1.7.4 на Python 2.7 и Chrome 40.0

такая же проблема, с которой я столкнулся при разработке сайта в django-1.10.5 и python-2.7.13. Но в моем firefox-51 и chrome страница входа в систему смогла получить css, но все еще не было стиля. Но странно это работало на IE-8..

Я попытался сделать все возможное, что упоминается здесь и подходит для моего набора версий sw. Никто не работал.

но когда я попробовал тот же сайт на другой системе которая питон-2.7.8, это сработало..

просто опубликовано, если это может помочь кому-то.

отредактировано: позже я обнаружил, что в python-2.7.13, написав следующие две строки settings.py (плюс очистка кэша браузера) сделал трюк

Если у вас есть значение, установленное в settings.py для STATICFILES_DIRS и объявленной папки не существует или в неправильном месте это приведет к тому, что у администратора не будет стиля например определяя STATICFILES_DIRS = (os.путь.join(BASE_DIR, " static")) и статическая папка не существует

потерпев неудачу после попытки 1000 предложений, я, наконец, нашел решение, которое помогло. Вот что я пробовал и что я использовал. Я использую django-1.11 и веб-сервер nginx. Во-первых, я убедился, что мои CSS/js файлы не получают 404 в консоли браузера. После этого я увидел предупреждение

ресурс интерпретируется как таблица стилей, но передается с типом MIME text / plain

Читайте также: