Обслуживание статических файлов django в среде разработки

Я хочу использовать статические файлы для загрузки моего css с помощью команды runserver. Проблема в том, что я попробовал все решения, которые я нашел здесь, в stackoverflow, а также в документах django, но они вообще не работают... Я не знаю, что я могу сделать... Если я установил

STATIC_URL = '/static/'
STATIC_ROOT = 'C:\Users\Max\Works\www\mysite\mysite\static'
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

Я думал, что этого достаточно... Я что-то пропустил? Можете ли вы сказать мне, как лучше всего настроить статические файлы в среде разработки? Спасибо за совет...

РЕДАКТИРОВАТЬ (1) Я уже вставил свой шаблон {{STATIC_URL}}css/dark-grey.css" и css находится в C:\Users\Max\Works\www\mysite\mysite\static\css\dark- grey.css, я действительно не могу понять, что не так...


person Maksim    schedule 23.12.2011    source источник


Ответы (4)


В ваших настройках.py

ОТЛАДКА=Истина

Согласно документам:

Это представление автоматически включается сервером запуска (с параметром DEBUG, установленным на True).

Использование шаблона URL - это способ заставить его работать, что мне лично даже не нужно делать в моем проекте, пока DEBUG=True. У вас всегда будет включен DEBUG, когда вы разрабатываете, и когда вы переключаетесь на производство, вы все равно даже не используете сервер разработки, поэтому вы укажете свой рабочий сервер на статическое местоположение.

Это фрагмент моих статических настроек из файла settings.py. Мне не нужно вручную добавлять этот статический URL-адрес просмотра

import os

DEBUG = True

PROJECT_ROOT = os.path.dirname( __file__ )
PROJECT_NAME = os.path.basename(PROJECT_ROOT)

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_ROOT, 'web/'),
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)


TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
    ...
    ...
)
person jdi    schedule 23.12.2011
comment
Пробовал, но вообще не работает. Я копирую/вставляю ваш код в свой settings.py, и он выдает ошибку 404, как и раньше... - person Maksim; 23.12.2011
comment
Простое копирование и вставка не исправит это мгновенно. Вы изменили STATICFILES_DIRS так, чтобы он указывал на каталог с вашим статическим содержимым? Мой называется web/ прямо под корнем проекта. Именно там я храню весь свой общий статический контент верхнего уровня. Если у приложений есть свои собственные, под каждым приложением будет static/ dir. STATIC_ROOT на самом деле не важен для текущей ситуации. - person jdi; 23.12.2011
comment
Да, я получил это, теперь это работает, большое спасибо... Теперь у меня проблема, что мой шаблон неправильно заменяет путь к файлам... href=css/dark-grey.css также, если я поместил в источник href= {{ STATIC_URL }}css/темно-серый.css - person Maksim; 23.12.2011
comment
@MaksimSinik - добавьте это в свой TEMPLATE_CONTEXT_PROCESSORS: 'django.core.context_processors.static', иначе он не будет анализировать этот тег. - person jdi; 23.12.2011
comment
У меня даже нет TEMPLATE_CONTEXT_PROCESSORS в моем файле settings.py, это нормальное поведение? - person Maksim; 23.12.2011
comment
Я поместил TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth', 'django.core.context_processors.static',) в свой файл settings.py, и он все равно не работает... Если я жестко запрограммирую его с помощью /static/css /dark-grey.css работает как шарм... - person Maksim; 23.12.2011
comment
/static/ будет работать сразу. Да, обработчики контекста шаблона выглядят так: docs. djangoproject.com/en/dev/howto/static-files/ - person jdi; 23.12.2011
comment
Хм, так что я обнаружил, что использовал ярлык render_to_response, теперь я импортировал и использовал 3-й аргумент context_instance = RequestContext (запрос), и он работает как шарм ... Спасибо, наконец, я заставил его работать ... Это будет последний вопрос, который я задам спроси в этой теме. Итак, чтобы все заработало, я должен установить каталог для статических файлов в режиме разработки, установить статические файлы для производства, а затем, прежде чем опубликовать сайт, запустить manage.py collectstatic, чтобы поместить все статические в одну папку и, наконец, у меня все работает? Я что-то упускаю? - person Maksim; 23.12.2011
comment
@MaksimSinik - Хорошая мысль о RequestContent(). Да, в двух словах: 1) STATIC_ROOT указывает на место, где БУДЕТ собираться статика 2) STATICFILES_DIRS — это дополнительные местоположения в дополнение к ‹app›/статическим исходным местоположениям. И на сервере разработки он будет использовать эти местоположения напрямую. 3) При использовании производственного сервера, такого как apache, используйте python manage.py collectstatic, чтобы собрать все эти статические местоположения в свой STATIC_ROOT и указать apache (или другое) на это как на статическое местоположение носителя. - person jdi; 23.12.2011
comment
Большое спасибо! Теперь я счастливый нуб Джанго! :D - person Maksim; 23.12.2011

Используйте косую черту / и НЕ косую черту \ в пути, даже для путей Windows.

person greenafrican    schedule 16.11.2012

Вам нужно добавить шаблоны URL:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... the rest of your URLconf here ...

urlpatterns += staticfiles_urlpatterns()

См. документацию здесь

person c4urself    schedule 23.12.2011
comment
Получил ли я ту же ошибку, страница не найдена (404) Метод запроса: GET URL-адрес запроса: 127.0.0.1:8000/static/css/dark-grey.css - person Maksim; 23.12.2011
comment
Хмм хорошо. давайте посмотрим, связано ли это с вашим путем Windows в static_url? Вы можете проверить это с добавленным /? - person c4urself; 23.12.2011
comment
Извините, я имел в виду добавить '/' в конец вашей настройки static_root. - person c4urself; 23.12.2011
comment
Вам не нужно добавлять это, если вы работаете с DEBUG=True. Смотри мой ответ - person jdi; 23.12.2011
comment
На самом деле я исправил эту часть с помощью предложения jdi, но у меня все еще есть проблемы с процессором контекста... - person Maksim; 23.12.2011

Вам также нужно выполнить следующую команду, чтобы переместить статические файлы в нужное место (и чтобы Django знал, что они там):

python manage.py collectstatic

Полная документация по статическим файлам в Django 1.3 находится здесь: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

person Kirsten Jones    schedule 23.12.2011
comment
Это необходимо только в том случае, если вы запустите рабочий сервер и вам нужно указать статическое местоположение. На сервере разработки он проверит ваши статические определенные каталоги и статические каталоги приложений. - person jdi; 23.12.2011
comment
На самом деле я уже сделал это, и теперь моя папка /static/ заполнена файлами, а также внутри нее я получил еще одну /static/ с моей исходной папкой css и файлами... я могу получить доступ к css по адресу 127.0.0.1:8000/static/static/css/dark-grey.css O_o - person Maksim; 23.12.2011
comment
@MaksimSinik - На самом деле вам не следует ничего помещать в STATIC_ROOT. Именно туда он попадет, когда вы соберете его с помощью этой команды collectstatic и куда вы укажете свой рабочий сервер. Когда вы находитесь в режиме сервера разработки, он обнаружит для вас статический контент в статических / подкаталогах ваших приложений и в дополнительных каталогах, которые вы указали в STATICFILES_DIRS (см. мой ответ) - person jdi; 23.12.2011
comment
Слава Богу! Я потерял 4 часа сегодня днем, чтобы исправить это ... Я прочитал 2000 раз документы и прочее и не смог их получить ... Теперь я поместил папку css в свое приложение для блога, и затяжка работает ... Теперь я вижу это с прямой ссылкой, но я не могу включить его в свой шаблон с {{ STATIC_URL }}css/dark-grey.css какие-либо предложения? - person Maksim; 23.12.2011
comment
@MaksimSinik - добавьте это в свой TEMPLATE_CONTEXT_PROCESSORS: 'django.core.context_processors.static', иначе он не будет анализировать этот тег. - person jdi; 23.12.2011