Подтвердить что ты не робот

Справка по приложению в статических файлах Django

У меня есть небольшая проблема с Django приложение staticfiles.

Я добавил

'django.contrib.staticfiles',

на мой INSTALLED_APPS и добавили

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/'

в мой settings.py файл.

Все мои статические файлы находятся в папке STATIC_ROOT на моем Mac.

Теперь, в моем шаблоне я использую

{{ STATIC_URL }}

который правильно отображает /static/.

Однако

{{ STATIC_URL }}css/style.css

приведет к ошибке 404. Я использую команду "runningerver" в качестве сервера.

Есть ли что-то, что мне не хватает?

4b9b3361

Ответ 1

Я умоляю вас прочитать инструкции для этого: http://docs.djangoproject.com/en/dev/howto/static-files/

Короче: STATIC_ROOT используется, только если вы вызываете команду collectstatic manangement. Не нужно было добавлять каталог в параметр STATICFILES_DIRS для обслуживания ваших статических файлов!

Во время разработки (когда используется автоматический просмотр обслуживания) staticfiles автоматически ищет статические файлы в разных местах (потому что вы вызываете его представление "serve" с путём к статическому файлу). Для этого поиска он будет использовать так называемые "искатели" (как определено в настройке STATICFILES_FINDERS).

  • Один из искателей по умолчанию - это AppDirectoriesFinder, который будет выглядеть в директории/static/для каждого из ваших настроек INSTALLED_APPS.

  • Другим детектором по умолчанию является FileSystemFinder, который будет выглядеть в каталогах, которые вы указываете в настройке STATICFILES_DIRS.

Кстати, оба этих шаблона поиска аналогичны тем, как работает загрузка шаблона.

Тот же метод будет использоваться при запуске команды collectstatic, за исключением того, что теперь он будет собирать файлы из разных мест (используя те же поисковые устройства, что и выше), помещая найденные файлы в STATIC_ROOT, готовые к развертыванию.

Ответ 2

Если вы хотите просто решить проблему - прокрутите вниз до "Решение".

Обзор

Я обнаружил ту же проблему вчера. Вот что я нашел:

Все, что вам нужно, это подходящий статический искатель, который найдет ваш STATIC_ROOT и все его содержимое, но такого искателя нет. Здесь находятся искатели по умолчанию:

  • django.contrib.staticfiles.finders.AppDirectoriesFinder - поиск установленных django-приложений dirs для "статической" папки, но большинство из них теперь используют устаревшие папки "media".

  • django.contrib.staticfiles.finders.FileSystemFinder - используйте все dirs, упомянутые в STATICFILES_DIRS, но вы не можете добавить STATIC_ROOT в него.

  • django.contrib.staticfiles.finders.DefaultStorageFinder - поиск по умолчанию в вашем DEFAULT_FILE_STORAGE, который по умолчанию является django.core.files.storage.FileSystemStorage, и указывает на ваш MEDIA_ROOT

Решение

Это все, никаких дополнительных вариантов. На данный момент нет возможности использовать STATIC_ROOT (в Django 1.3).
Поэтому я только что написал свой собственный поисковый запрос для этих нужд:

  • Мой пользовательский файл статического поиска: finders.py:

    from django.core.files.storage import FileSystemStorage
    from django.contrib.staticfiles.finders import BaseStorageFinder
    from django.conf import settings
    
    class StaticFinder(BaseStorageFinder):
        storage = FileSystemStorage(settings.STATIC_ROOT, settings.STATIC_URL)
    
  • settings.py

    STATICFILES_FINDERS = (
        'finders.StaticFinder',
    )
    
  • Если вы хотите использовать его с другими искателями - я предлагаю поместить их после него в STATICFILES_FINDERS

И помните: это решение должно использоваться только в целях развития и никогда не выпускаться!

Ответ 3

Я нашел быстрое и легкое обходное решение для обслуживания глобальных статических файлов проекта во время разработки:

  • Запустите новое приложение, которое содержит ваши статические файлы проектов (например, "manage.py startapp static_content" )
  • Создайте папку с именем "static" в этом приложении и разместите там свои статические файлы.
  • Добавить новое приложение в список установленных приложений

Ответ 4

Прежде всего, убедитесь, что у вас есть статический сервис в вашем urls.py ТОЛЬКО ДЛЯ РАЗРАБОТКИ.

Кроме того, у вас может быть дополнительная косая черта. Если ваш STATIC_URL == '/static/', то

{{STATIC_URL}}/css/style.css должен быть {{STATIC_URL}} css/style.css.

Ответ 5

STATIC_ROOT = '/home/ws/be/bla/'
STATICFILES_DIRS = ('/home/ws/be/static/',)
STATIC_URL = '/static/'

Это работает для меня. STATIC_ROOT должен отличаться от STATICFILES_DIRS (версия Django 1.4 pre-alpha SVN-16436)