1

我有一个 django 视图生成一堆数据,我想将这些数据分解为三个不同的图表以显示在模板中。我可以一一生成图表并执行简单的 return HttpResponse() 以确定我正在使用正确的数据等创建它们。

由于这是我第一次使用 ReportLab,我想确保我采用正确的方法来生成这些以在 Web 应用程序中进行演示。我可以看到两种不同的方法来处理这个问题:

  1. 实际上将图表的二进制表示传递给模板并将它们分配给 img 标签。(不幸的是,到目前为止我一直没有成功 - 当我在模板中转储二进制数据时,它是空的)

    1. 将图表另存为图像并引用模板中的静态图像。

我正在寻找一些关于采取哪种方法的建议,如果可能的话,还有一些实施提示。

作为参考,这里是生成图表的视图中的一个片段(其中大部分是从 DjangoProject wiki 示例构建的):

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

这将产生一个条形图。FWIW,将“image_data”传递给模板并将其转储到该模板上并没有显示任何内容。也许您不能将二进制数据直接传递给模板?

4

1 回答 1

0

我会将图像保存到 Media 目录并将它们的路径传递给要在 img.href 中使用的模板。这将帮助您缓存图表以供多次使用,并使您在调试时更轻松。

但是,您始终可以尝试对图像进行 base64 编码并将它们作为二进制文件传递给模板,但这会使您的 html 在渲染时稍微变大(读取速度慢),并且在需要时需要额外的调试工作。我推荐第一个选项。

于 2012-06-14T15:38:09.240 回答