Как я могу добавить CSS / изображения на веб-странице с помощью Django? - PullRequest
2 голосов
/ 05 января 2012

Я поместил изображение ("hi.png") и файл css в / home / user1 / djangoblog / blog / static

В шаблонах у меня есть <img src="{{ STATIC_URL }}images/hi.png" />

Я редактировалsettings.py =>

STATIC_ROOT = ''
STATIC_URL = "/static/"

STATICFILES_DIRS = (
    "/home/user1/djangoblog/blog/static/",)

Источник веб-страницы возвращает =>

<div><img src="/static/images/a.jpg" /></div>

Если views.py => Изображение не отображается навеб-страница.

now = datetime.datetime.now()
#return render_to_response('current_datetime.html', {"foo": now}, context_instance=RequestContext(request))
t = loader.get_template('current_datetime.html')
c = Context({'foo': now})
return HttpResponse(t.render(c))

Но если views.py => отображает изображения на веб-странице.

return render_to_response('current_datetime.html', {"foo": now}, context_instance=RequestContext(request))

Похоже, это проблема с HttpResponse или RequestContext.Как я могу исправить эту проблему с HttpResponse или RequestContext?

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Я подозреваю, что проблема в том, что в вашем файле настроек нет процессора контекста staticfiles. По этой причине /static/ не вставляется туда, куда вы положили {{ STATIC_URL }}.

Это так же просто, как положить

'django.core.context_processors.static',

В список контекстных процессоров (TEMPLATE_CONTEXT_PROCESSORS) в вашем файле settings.py.

Обновление

Я добавил это в TEMPLATE_CONTEXT_PROCESSORS, но все равно это не сработало. - гуру 3 часа назад

Добавление 'django.core.context_processors.static' в список процессоров контекста действительно исправило вашу проблему, потому что, как вы можете видеть, она вставляет значение для STATIC_URL везде, где оно видит {{ STATIC_URL }} в ваших шаблонах. Ошибка в том, что вы изменили значение STATIC_URL на "/home/user1/djangoblog/blog/static/", вероятно, потому что вас смутили некоторые ответы здесь.

Измените значение STATIC_URL назад на '/static/', чтобы строка выглядела

STATIC_URL = '/static/'

Это решит вашу проблему.

Шаблоны Django просто помещают все, что находится в переменной, в шаблон . Им все равно, что это такое или что это представляет Если значение STATIC_URL равно /home/user1/djangoblog/blog/static/, то оно покорно вставляет /home/user1/djangoblog/blog/static/ везде, где видит {{ STATIC_URL }}, поэтому вы видите

<img src="/home/user1/djangoblog/blog/static/images/a.jpg" />

всякий раз, когда он отображает шаблон, содержащий <img src="{{ STATIC_URL }}images/a.png" />

3 голосов
/ 05 января 2012

Вам нужно более внимательно прочитать документацию по staticfiles.

Вы указываете абсолютный путь к статическому каталогу с помощью STATIC_ROOT и URL-адрес, по которому каталог может быть доступен через браузер с помощью STATIC_URL. Ваш основной статический каталог не должен никогда идти в STATICFILES_DIRS. Этот параметр позволяет указать дополнительные каталоги, которые должны обрабатываться при выполнении команды управления collectstatic.

В общем, вы никогда не используете свой фактический статический каталог. В процессе разработки Django обслуживает файлы из каталога static каждого приложения и любых каталогов в STATICFILES_DIRS (исключая основной каталог static). В производственной среде вы запускаете команду управления collectstatic, а затем настраиваете свой основной веб-сервер (Apache, Nginx и т. Д.) Для обслуживания файлов из STATIC_ROOT. Django никогда не обслуживает ничего из основного каталога static (STATIC_ROOT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...