1

テンプレートに表示するために3つの異なるチャートに分解したいデータの束を生成するdjangoビューがあります。グラフを1つずつ生成し、HttpResponse()を返すだけで、適切なデータなどを使用してグラフを作成していることを確認できます。

ReportLabを使用するのはこれが初めてなので、Webアプリで表示するためにこれらを生成する際に正しいアプローチを取っていることを確認したいと思います。これを処理する2つの異なる方法を見ることができます:

  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 に答える