Как обслуживать статические файлы для локальной разработки в 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, изменения были сделаны только в соответствии с учебником, так что вы должны иметь то же самое.