使用报告实验室创建条形图并在模板中显示

时间:2012-06-08 03:27:02

标签: django reportlab

我有一个django视图生成一堆数据,我想分解成三个不同的图表,以便在模板中显示。我可以逐个生成图表并做一个简单的返回HttpResponse()来确定我是用正确的数据创建它们等。

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

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

    1. 将图表另存为图像,并在模板中引用静态图像。
  2. 我正在寻找一些关于采取哪种方法的建议,如果可能的话,还有一些提示。

    作为参考,这里是产生图表的视图的片段(其中大部分是从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)) 
    

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

1 个答案:

答案 0 :(得分:0)

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

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