встраивание сгенерированного img в шаблон django - PullRequest
5 голосов
/ 28 июля 2010

как бы я встроил сгенерированное изображение в шаблон django?

что-то вроде

return render_to_response('graph.html', { 'img': get_graph() })

Я не хочу этого - потому что это просто отправить изображение

http.HttpResponse(get_graph(), mimetype="image/png")

Ответы [ 3 ]

4 голосов
/ 15 августа 2013

Я хотел встроить сгенерированное изображение matplotlib в страницу django, не совершая двух поездок на сервер django (один для получения шаблона, один для создания изображения).Я добавил в свой шаблон следующее для изображения

<img alt="embedded" src="data:image/png;base64,{{inline_png}}"/>

Затем в методе представления:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import cStringIO as StringIO
import base64

num_signed_off = random.randint(0, 10)
num_reviewed = random.randint(0, 50)
num_unreviewed = random.randint(0, 50)

fig = Figure()
ax = fig.add_subplot(111, aspect='equal', axis_bgcolor='b')
ax.pie([num_signed_off, num_reviewed, num_unreviewed],
        labels=['Signed Off', 'Reviewed', 'Unreviewed'],
        colors=['b', 'r', 'g'],
        )
ax.set_title('My Overall Stats')
ax.set_axis_bgcolor('r')
canvas=FigureCanvas(fig)
outstr = StringIO.StringIO()
canvas.print_png(outstr)
ret['inline_png'] = base64.b64encode(outstr.getvalue())
outstr.close()

return render(request, "my_view.html", ret)

Единственная проблема с этим заключается в том, что он не работает в IE7 или IE8- он работает с IE9 и новее, продуман и, конечно, со всеми стандартными веб-браузерами.

4 голосов
/ 28 июля 2010

Вы можете кодировать base64 данные изображения и использовать data URI .

3 голосов
/ 15 ноября 2010

Вы можете сопоставить URL с одной из ваших функций просмотра, которая возвращает HttpResponse с данными изображения, и использовать этот URL в качестве источника для вашего элемента <img>, например,

urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^image/', 'views.get_image'),
)

views.py

from django.http import HttpResponse

def get_image(request):
    image_data = get_graph() # assuming this returns PNG data
    return HttpResponse(image_data, mimetype="image/png")

index.html

<img src="image"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...