Как обслуживать статические файлы для локальной разработки в Django 1.4
Я только что загрузил последнюю версию Django (1.4.1), и я не могу понять, как обслуживать css-файлы при разработке локально с помощью runserver. Я прочитал соответствующий документы Django в статических файлах и многие, многие вопросы и ответы здесь... похоже, это должно быть более или менее автоматически, но это не работает для меня.
Я работаю над приложением опросов из учебника.
404 от log
[27/Apr/2012 01:04:09] "GET /polls/ HTTP/1.1" 200 210
[27/Apr/2012 01:04:09] "GET /polls/css/styles.css HTTP/1.1" 404 2596
структура каталогов
mysite
|-- manage.py
|-- mysite
|-- __init__.py
|-- settings.py
|-- urls.py
|-- wsgi.py
|-- polls
|-- __init__.py
|-- models.py
|-- tests.py
|-- views.py
|-- static
|-- css
|-- styles.css
|-- templates
|-- polls
|-- index.html
.HTML-код
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/styles.css">
settings.py
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.static',
)
^^^ у меня не было переменной TEMPLATE_CONTEXT_PROCESSORS в settings.py когда я начал проект и должен был добавить его вручную - должен ли я беспокоиться об этом?
STATICFILES_DIRS пуст, потому что файл css находится в каталоге с именем static в опросах app, где Django ищет его автоматически-правильно?
у меня также есть django.ВНО.staticfiles в моем INSTALLED_APPS.
urls.py
Я видел в документах, что это решение работает для локальных серверов разработки другое чем runserver-звучит так, как будто это не должно быть необходимо в противном случае, верно? (В настоящее время я прокомментировал это.)
EDIT: я раскомментировал эти строки, но не увидел изменений-все еще получение того же 404 в файле css
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
у меня неправильно настроена структура каталогов? Я пропускаю необходимые настройки в settings.py? Любая помощь будет очень признательна! Спасибо!
EDIT:
Я принял предложение Марка и прочитал RequestContext. Меняю вид:
return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})
to
from django.template import RequestContext
...
return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list}, context_instance=RequestContext(request))
получил/ static / url для регистрации:
[27/Apr/2012 13:56:55] "GET /static/css/styles.css HTTP/1.1" 200 19
это исправляет проблема.
4 ответов
чтобы использовать STATIC_URL
в шаблоне вы должны быть уверены, что вы используете RequestContext
наряду с добавлением 'django.core.context_processors.static'
to TEMPLATE_CONTEXT_PROCESSORS
. Это делается для вас, если вы используете render
ярлык. Если вы не используете RequestContext
затем вы можете использовать {% get_static_prefix %}
тег шаблона от staticfiles
библиотека тегов шаблонов. Это подробно описано в документах здесь: https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#other-helpers
.' У меня была та же проблема, и evnetually с тем же coinfuration, как упоминалось выше, это сделало трюк: я добавил: setting.py путь к моему статическому каталогу в STATICFILES_DIRS:
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR,'static'),
)
когда также в settings.py PROJECT_DIR имеет значение:
PROJECT_DIR=os.path.dirname(os.path.abspath(__file__))
из вашего 404, похоже, вы не включаете {{ STATIC_URL }} в свой шаблон. В этом-то и проблема. вместо того, чтобы просто "css/file", сделайте "{{ STATIC_URL}}css / file"
не глядя слишком сильно, ваши настройки выглядит нормально. Если вышеизложенное не работает, попробуйте выполнить. /manage.py collectstatic и посмотреть, поможет ли это (он перемещает статические файлы из каталогов приложений в статический каталог проекта).
и определенно раскомментируйте эти строки в своем urls.py! Если нет ... имейте статические шаблоны url, когда он идет запрашивать что-то из /static/, он не будет знать, что делать.
это сработало для меня при разработке сервера:
1. Я добавил папку " static "в каталог" myblog " моего приложения.
2. Добавлено " myblog.css "файл внутри" статической " папки.
3. Связал таблицу стилей с шаблоном моего приложения, код приведен ниже.
<link rel="stylesheet" href="{{ STATIC_URL }}myblog.css" type="text/css" media="screen" />
Я не менялся settings.py или urls.py файлы для того, чтобы исправить css, изменения были сделаны только в соответствии с учебником, так что вы должны иметь то же самое.