2013-05-03 68 views
3

我已经花了一天的时间在这个问题上没有成功,所以帮助,将不胜感激。django:服务动态(reportlab)PNG模板

我使用ReportLab的,并成功地用它呈现给浏览器生成图形这个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') 

我的问题是,虽然我想在模板中渲染PNG文件,像这样(不工作):

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

我一直在黑客这个问题多年。这无疑是一个新手问题!为了保存我的理智,请欣赏这方面的建议。非常感谢:)

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

+0

你能不叫IMG生成视图URL作为一个img标签中的src,所以你返回HttpResponse(binaryStuff,'image/png')?而不是然后试图通过binaryStuff? – JamesO 2013-05-03 12:46:20

+0

试过。在我的模板中:{%if graph!=''%} some_text {%endif%} – andyw 2013-05-03 13:01:16

+0

我的意思是其中get_image是你上面显示的视图,那你试过了吗? – JamesO 2013-05-03 13:10:39

回答

3

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

在urls.py

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

在认购/ monitorSizes.html

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