2012-06-08 73 views
1

我有一個django視圖,生成一堆數據,我想將其分解爲三個不同的圖表以顯示在模板中。我可以逐個生成圖表並做一個簡單的返回HttpResponse()來確定我使用正確的數據創建它們等。使用報告實驗室創建條形圖並在模板中顯示

由於這是我第一次使用ReportLab,我想使當然,我正在採取正確的方法,在Web應用程序中生成這些演示文稿。我可以看到兩種不同的方式來處理這個問題:

  1. 圖表的二進制表示實際上傳遞給模板,並將其分配給img標籤。 (不幸的是,我迄今爲止沒有成功 - 當我將二進制數據轉儲到模板中時,它是空的)

    1. 將圖表另存爲圖像並在模板中引用靜態圖像。

我正在尋找一些建議哪種方法採取和可能的話,一些提示的實現。

僅供參考,這裏是從生產的圖表(這在很大程度上來自DjangoProject維基樣品建)視圖中的片段:

#instantiate a drawing object 
import mycharts 
d = mycharts.MyBarChartDrawing(width=800, height=500) 

d.chart.categoryAxis.categoryNames = ['Pre-Operative Visit', '6-Week Visit', '3-Month Visit ', '6-Month Visit', '12-Month Visit'] 
d.chart.data = vas_scores_wrapper 

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

return HttpResponse(image_data, 'image/gif') 
return render_to_response('summaries/study_summary.html', {'patients':patient_list,'query_form':query_form,'image_data':image_data}, context_instance=RequestContext(request)) 

這將起作用,以產生BARCHART。 FWIW,將'image_data'傳遞給模板並將其轉儲到該模板上並不顯示任何內容。也許你不能將二進制數據直接傳遞給模板?

回答

0

我會將圖像保存到媒體目錄並將其路徑傳遞給img.href中要使用的模板。這可以幫助您緩存多個用途的圖表,並在調試時讓您的生活更輕鬆。

但是,您總是可以嘗試對圖像執行base64編碼,並將它們作爲二進制文件傳遞給模板,但這會使您的html在渲染時(讀取速度較慢)稍大一些,並且在需要時需要進行額外的調試。我建議第一個選項。