Как отображать изображения в шаблоне Django
-
25-10-2019 - |
Вопрос
Извините, мой вопрос очень прост, я хочу отобразить изображение на странице шаблона, я работаю для его рабочего времени, изображение не отображается, я создаю новый проект SecondPrjt, есть только одна функция представления с именем «Индекс» и один шаблон с именем test.html, и создайте папку с именем static в папке Secondprjt и создайте в ней изображения папок и поместите все необходимые изображения
urls.py:
urlpatterns = patters ('',
# Примеры:
# url (r '^$', 'secondprjt.views.home', name = 'home'),
(r '^$', 'views.index'),
.........
)
urlpatterns += staticfiles_urlpatterns ()
views.pyот django.shortcuts import render_to_response
def Index (запрос):
return render_to_response ('test.html')
test.html:
img src = "{{static_url}} images/img03.jpg" ширина = "186" высота = "186"
настройки.py
Static_root = "c:/wamp/www/secondprjt/static"
Static_url = '/static/'
Staticfiles_dirs = ("c:/wamp/www/secondprjt/static",)
Staticfiles_finders = ('django.contrib.staticfiles.finders.filesystemfinder', 'django.contrib.staticfiles.finders.appdirectoriesfinder',
)
Insted_apps = (
-----
'django.contrib.staticfiles',
----
)
Может ли кто -нибудь предложить, что со мной не так.ПримечаниеЯ использую окна а также Django1.3 и использование сервера разработки. спасибо заранее
Я получил следующее после того, как я запрошу http://127.0.0.1:8000/ в просмотре
c: wamp www secondprjt> python Manage.py Runserver Validating Models ...
0 Ошибки обнаружили, что Django версия 1.3, используя настройки SecondPrjt.settings 'Server разработки работает в 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
Решение
По всей вероятности, ваша проблема в том, что вы использовали абсолютные URL -адреса в обоих STATIC_ROOT
а также STATICFILES_DIRS
.
Если вы хотите включить абсолютные URL -адреса в каждый статический DIR (это похоже на взломать, но это нормально, так как вы должны только когда -либо использовать 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
в настройки.py. Анкет Вы должны использовать render_to_response
следующим образом:
def index(request):
return render_to_response('test.html', context_instance=RequestContext(request))
Ниже приведено объяснение того, какие процессоры контекста являются:
В настройки.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,
}
(Вы заметите, что выше в настройки.py, Я использовал constant_context_processor.constants
как один из процессоров контекста). Это позволяет мне определять константы в настройки.py и использовать их в моих шаблонах, например, как что -то вроде {{ CONSTANTS.favicon_url }}
.
Как видите, преимущество в процессе контекста и использования RequestContext
Это контекст, который вам обычно нуждается в ваших шаблонах, добавляется автоматически, поэтому вам не нужно вручную заполнять словарь вашего контекста в каждом представлении. Джанго знает, что есть определенные переменные, к которым вы обычно хотите получить доступ в своих шаблонах, поэтому они делают их доступными через свои контекстные процессоры (так, например, django.core.context_processors.request предоставит вам доступ к данному запросу, его Get and Post Post Параметры и все виды метаданных из шаблона, что часто полезно, если, скажем, вы варьируете содержание на основе параметров GET).
В вашем случае вы не хотели использовать много контекста, но вы хотели немного использовать ({{ STATIC_URL }}
), поэтому вам нужно по крайней мере django.core.context_processors.static.