django:将动态(reportlab)png 提供给模板

and*_*dyw 4 django image reportlab dynamic

我已经在这个问题上度过了一天,但没有成功,因此将不胜感激。

我使用 reportlab 生成了一个图表,并使用本教程成功地将其渲染到浏览器:

        d = MyBarChartDrawing()

        #extract the request params of interest.
        #I suggest having a default for everything.
        if 'height' in request:
            d.height = int(request['height'])
        if 'width' in request:
            d.width = int(request['width'])

        if 'numbers' in request:
            strNumbers = request['numbers']
            numbers = map(int, strNumbers.split(','))    
            d.chart.data = [numbers]   #bar charts take a list-of-lists for data

        if 'title' in request:
            d.title.text = request['title']


        #get a GIF (or PNG, JPG, or whatever)
        binaryStuff = d.asString('png')

        return HttpResponse(binaryStuff, 'image/png')
Run Code Online (Sandbox Code Playgroud)

我的问题是我想在模板中渲染这个 png,像这样(不起作用):

return render(request, "subscription/monitorSizes.html", {'form':form,'message':'','graph':binaryStuff})
Run Code Online (Sandbox Code Playgroud)

我多年来一直在解决这个问题。这无疑是一个新手问题!为了挽救我的理智,希望得到有关这方面的建议。非常感谢 :)

编辑:我在同一问题上发现了另一个stackoverflow Q,但并没有真正解决。

小智 5

在views.py中

def show_image(request):
    d = MyBarChartDrawing()
    #extract the request params of interest.
    #I suggest having a default for everything.
    if 'height' in request:
        d.height = int(request['height'])
    if 'width' in request:
        d.width = int(request['width'])

    if 'numbers' in request:
        strNumbers = request['numbers']
        numbers = map(int, strNumbers.split(','))    
        d.chart.data = [numbers]   #bar charts take a list-of-lists for data

    if 'title' in request:
        d.title.text = request['title']


    #get a GIF (or PNG, JPG, or whatever)
    binaryStuff = d.asString('png')

    return HttpResponse(binaryStuff, 'image/png')

def somepage(request):
     return render(request, "subscription/monitorSizes.html", {'form':form,'message':'','graph':reverse('show_image')})
Run Code Online (Sandbox Code Playgroud)

在 urls.py 中

...
url(r'^show_image/$', 'your_view.show_image', name='show_image'),
url(r'^somepage/$', 'your_view.somepage', name='somepage'),
...
Run Code Online (Sandbox Code Playgroud)

在订阅/monitorSizes.html

...
{% if graph != '' %} <img src="{{ graph }}" alt="some_text"> {% endif %}
...
Run Code Online (Sandbox Code Playgroud)