как отображать изображения в шаблоне Django - PullRequest
0 голосов
/ 05 сентября 2011

извините, мой вопрос очень простой, я хочу отобразить изображение на странице шаблона, я работаю над этим часами, изображение не отображается Я создаю новый проект SecondPrjt, есть только одна функция просмотра с именем 'index' и один шаблон с именем test.html, и создаю папку с именем static в боковой папке SecondPrjt и создайте в нем папку с изображениями и поместите туда все необходимые изображения
urls.py:

urlpatterns = Patterns ('',
# Примеры:
# url (r '^ $', 'SecondPrjt.views.home', name = 'home'),
(Г '^ $', 'views.index'),
......... )

urlpatterns + = staticfiles_urlpatterns ()

views.py из django.shortcuts import render_to_response
индекс def (запрос):
return render_to_response ('test.html')


test.html:
img src = "{{STATIC_URL}} images / img03.jpg" width = "186" height = "186"

settings.py


STATIC_ROOT = "C: / wamp / www / SecondPrjt / static"
STATIC_URL = '/ static /'
STATICFILES_DIRS = ( "C: / WAMP / WWW / SecondPrjt / статический", )
STATICFILES_FINDERS = ( 'Django.contrib.staticfiles.finders.FileSystemFinder', 'Django.contrib.staticfiles.finders.AppDirectoriesFinder',

)
INSTALLED_APPS = (
-----
'django.contrib.staticfiles',
---- ) * * Тысяча двадцать-один

Может кто-нибудь подсказать, что со мной не так. Примечание Я использую windows и django1.3 и использую сервер разработки. Спасибо заранее
Я получил следующее после запроса http://127.0.0.1:8000/ в просмотре
c: \ wamp \ www \ SecondPrjt> python manage.py runserver Проверка моделей ...

0 ошибок найдено Django версия 1.3, используя настройки «SecondPrjt.settings» Сервер разработки работает на http://127.0.0.1:8000/ Выйдите из сервера с помощью CTRL-BREAK. [05 / Sep / 2011 15:18:24] «GET / HTTP / 1.1» 200 89 [05 / Sep / 2011 15:18:24] "GET /images/img03.jpg HTTP / 1.1" 404 2028

1 Ответ

2 голосов
/ 06 сентября 2011

По всей вероятности, ваша проблема в том, что вы использовали абсолютные URL как в STATIC_ROOT, так и STATICFILES_DIRS.

Если вы хотите включить абсолютные URL-адреса для каждого статического каталога (это похоже на взлом, но это нормально, так как вы должны использовать staticfiles_urlpatterns() только в разработке), тогда вы можете решить эту проблему, просто установив STATIC_ROOT = ''.

Редактировать : Похоже, это была не единственная ошибка. Кроме того, если вы посмотрите на результаты отладки, вы заметите что-то странное в 404 - оно исходит от /images/img03.jpg. Если вы помните, вы пытались добавить {{ STATIC_URL }} к этому, так что это должно было быть /static/images/img03.jpg.

Это потому, что при использовании render_to_response вы никогда не пропускаете никакого контекста (поэтому шаблон никогда не имеет доступа к STATIC_URL - он думает, что он пуст (поэтому вы не видели /static/ как часть URL изображения. Всякий раз, когда вы хотите использовать ЛЮБОЙ контекст, вы ДОЛЖНЫ передать его шаблону. В этом случае вам следует использовать [RequestContext].

Поэтому вы должны убедиться, что добавили django.core.context_processors.static к TEMPLATE_CONTEXT_PROCESSORS в settings.py . Вы должны использовать render_to_response следующим образом:

def index(request):
    return render_to_response('test.html', context_instance=RequestContext(request))


Ниже приводится объяснение того, что такое контекстные процессоры :

В settings.py у вас будет что-то вроде:

 TEMPLATE_CONTEXT_PROCESSORS = (
     'constant_context_processor.constants',
     'django.core.context_processors.static',
     'django.contrib.auth.context_processors.auth',
     'django.core.context_processors.debug',
     'django.core.context_processors.i18n',
     'django.core.context_processors.media',
     'django.core.context_processors.request', )

Важной частью здесь является то, что у вас есть django.core.context_processors.static. В Django контекстный процессор - это функция, которая возвращает контекстный запрос. Например, в моих проектах Django я часто использую следующий фрагмент кода:

constant_context_processor.py

import settings
def constants(request):
    return {
           'CONSTANTS': settings.CONSTANTS,
    }

(Вы заметите, что выше в settings.py я использовал constant_context_processor.constants в качестве одного из процессоров контекста). Это позволяет мне определять константы в settings.py и использовать их в моих шаблонах, например, как {{ CONSTANTS.favicon_url }}.

Как видите, преимущество для контекстных процессоров и использования RequestContext заключается в том, что контекст, который вам обычно нужен в ваших шаблонах, добавляется автоматически, поэтому вам не нужно вручную заполнять словарь вашего контекста в каждом представлении. Django знает, что есть определенные переменные, к которым вы обычно хотите получить доступ в своих шаблонах, поэтому они делают их доступными через свои контекстные процессоры (так, например, django.core.context_processors.request предоставит вам доступ к данному запросу, его GET и POST параметры и все виды метаданных из шаблона, что часто полезно, если, скажем, вы изменяете содержимое на основе параметров GET).

В вашем случае вы не хотели использовать много контекста, но вы хотели использовать немного ({{ STATIC_URL }}), поэтому вам нужно было как минимум django.core.context_processors.static.

...