2016-07-28 1 views
1

Предположим, что соответствующая функция в views.py выглядитКак передать изображение в шаблон в Django?

from PIL import Image 
def get_img(request, img_source) 
    base_image = Image.open(os.getcwd() + '/deskprod/media/img/'+ img_source + ".png") 
    #Some editing of base_image done with PIL that prevents image from being directly loaded in html 
    return render_to_response('get_img.html', { 
     'base_image': base_image}, 
     context_instance=RequestContext(request)) 

Как я могу затем отобразить base_image в get_img.html шаблоне?

+0

Вам не нужно передавать изображение в свой контекст. Вам нужен только путь к изображению, чтобы показать изображение в вашем шаблоне –

+0

Моисей, спасибо вам за ответ. В реальной программе было бы некоторое редактирование изображения, которое не может быть достигнуто в html - то есть, что сделано с библиотекой изображений python. В результате просто загрузка изображения непосредственно из шаблона не является вариантом. Я отредактировал вопрос, чтобы указать на это. –

+0

«В результате просто загрузка изображения непосредственно из шаблона не является вариантом» - это не-sequitur. Просто потому, что вы редактируете изображение, не означает, что вы не можете его сохранить где-нибудь и просмотреть его в обычном режиме. Что вы получаете, передавая необработанные данные изображения в шаблон? Разговор о чем-то HTML не сделан, чтобы сделать ... –

ответ

5

Вы должны обработать изображение, сохранить его на локальном диске, а затем отправить путь к нему или более похожим на URL-адрес носителя, который будет соответствовать этому изображению в качестве контекста для html-шаблона. Вам необходимо настроить сервер django для работы со статическими и мультимедийными файлами, чтобы настроить и обслуживать эти файлы в рабочей среде. Подробнее здесь https://docs.djangoproject.com/en/1.9/howto/static-files/

Однако должно быть возможно создать динамическое изображение и выполнить с django на лету с PIL, если вы не можете или действительно не хотите его локально сохранять. Это будет похоже на код и код, который вы должны добавить.

response = HttpResponse(mimetype="image/png") 
base_image.save(response, "PNG") 
return response 

Проверить также подробнее http://effbot.org/zone/django-pil.htm, он может работать, хотя я не проверял.

+0

Я приятно удивлен, что на самом деле было легкое решение этой проблемы. Большое спасибо, Камиль. –

0

Я думаю, что вы должны сохранить изображение (записать его в файл temp) в статическом каталоге проекта и в шаблоне использовать статическую команду и имя файла изображения для ее отображения.