Djangoプロジェクトのワークフローは次のようになります。
- ユーザーがチャート生成のパラメーターを指定します
- チャートはmatplotを使用して生成されます
- その後、チャートはAJAXを使用してユーザーに提供されます
さまざまなパラメータが異なるため、生成される可能性のあるチャートの数は非常に多いため、事前にチャートを生成して静的に提供することはできません。
matplotコマンドのshow()とsavfig()も、このタスクには適していないようです。
どうすればこれを達成できますか?
Djangoプロジェクトのワークフローは次のようになります。
さまざまなパラメータが異なるため、生成される可能性のあるチャートの数は非常に多いため、事前にチャートを生成して静的に提供することはできません。
matplotコマンドのshow()とsavfig()も、このタスクには適していないようです。
どうすればこれを達成できますか?
大まかにこのように:
import django.http
import matplotlib.pyplot
# This is your view function, hook it up to your URLconf.
def chart(request, *args):
# ...extract chart parameters from request.GET and/or args...
fig = matplotlib.pyplot.figure(...)
# ...draw your chart, invoking methods on fig...
response = django.http.HttpResponse(content_type='image/png')
fig.savefig(response, format='png')
return response
これをユーザーに表示するためにAJAXをどのように使用するかわかりません。適切な属性img
を持つ要素を挿入する方が簡単だと思います。src
jQueryを使用すると、次のようになります。
var src = '/chart/?' + $.param({
// This all ends up in request.GET
type: 'something',
foo: 'bar',
myParam: 123
});
$('#displayArea').empty().append($('<img>').attr('src', src));
ただし、AJAXが必要な場合は、もちろんを使用できます$.ajax
。
渡されたパラメーターによってグラフが完全に定義されており、ユーザーが同じグラフを数回表示したい場合は、サーバーから同じ画像を再要求しないように、リベラルなクライアントキャッシュヘッダーを設定することを検討してください。ただし、これは単なる最適化です。