通过AJAX提供生成的图表

时间:2012-06-22 20:16:06

标签: ajax django charts matplotlib

我的Django项目的工作流程应该是这样的:

  • 用户指定图表生成的参数
  • 使用matplot生成图表
  • 然后使用AJAX
  • 向用户提供图表

由于各种参数的差异,可能生成的图表数量非常大,因此预先生成图表并静态提供图表不是一种选择。

matplot命令show()和savfig()似乎也不适合该任务。

我最好能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

大致相同:

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

如果图表完全由传入的参数定义,并且用户可能希望多次查看同一图表,请考虑设置开放式client caching headers以避免从服务器重新请求相同的图像。这只是一个优化。