2013-05-03 46 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 %} 
...