django:服务动态(reportlab)png到模板 [英] django: serve dynamic (reportlab) png to template

查看:184
本文介绍了django:服务动态(reportlab)png到模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在这个问题上度过了一天,没有成功,所以帮助将不胜感激。



我使用reportlab生成图形,并将其成功呈现给浏览器此教程

  d = MyBarChartDrawing()

#提取感兴趣的请求参数。
#我建议对所有内容都有默认值。
如果请求中的height:
d.height = int(request ['height'])
如果请求中的width:
d.width = int ['width'])

如果请求中的'数字'
strNumbers = request ['numbers']
numbers = map(int,strNumbers.split(',' ))
d.chart.data = [numbers] #bar图表列出数据列表

如果请求中的title:
d.title。 text = request ['title']


#get一个GIF(或PNG,JPG或其他)
binaryStuff = d.asString('png')

return HttpResponse(binaryStuff,'image / png')

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

  return render(request, subscription / monitorSizes.html,{'form':form,'message':'','graph':binaryStuff })

我在这个问题上一直在黑客攻击年龄。这无疑是一个新手的问​​题!为了拯救我的理智,将会对此感到欣慰。非常感谢:)



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

解决方案

在views.py

  def show_image(request):
d = MyBarChartDrawing()
#extract请求感兴趣的参数。
#我建议对所有内容都有默认值。
如果请求中的height:
d.height = int(request ['height'])
如果请求中的width:
d.width = int ['width'])

如果请求中的'数字'
strNumbers = request ['numbers']
numbers = map(int,strNumbers.split(',' ))
d.chart.data = [numbers] #bar图表列出数据列表

如果请求中的title:
d.title。 text = request ['title']


#get一个GIF(或PNG,JPG或其他)
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')})

在urls.py

  ... 
url(r'^ show_image / $','your_view。 show_image',name ='show_im年龄'),
url(r'^ somepage / $','your_view.somepage',name ='somepage'),
...
/ pre>

订阅/ monitorSizes.html

  ... 
{%if graph!=''%}< img src ={{graph}}alt =some_text> {%endif%}
...


I've spent the day on this issue with no success so help would be appreciated.

I generate a graph using reportlab and successfully render it to the browser using this tutorial:

        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')

My issue though is that I'd like to render this png within a template, like so (does not work):

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

I've been hacking away at this issue for ages. It's no doubt a newbie problem! To save my sanity, would appreciate advice on this. Many thanks :)

edit: I found another stackoverflow Q on the same issue but it was not really solved.

解决方案

In 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')})

In urls.py

...
url(r'^show_image/$', 'your_view.show_image', name='show_image'),
url(r'^somepage/$', 'your_view.somepage', name='somepage'),
...

In subscription/monitorSizes.html

...
{% if graph != '' %} <img src="{{ graph }}" alt="some_text"> {% endif %}
...

这篇关于django:服务动态(reportlab)png到模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆