我的 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
.
如果图表完全由传入的参数定义,并且用户可能希望多次查看相同的图表,请考虑设置宽松的客户端缓存标头以避免从服务器重新请求相同的图像。不过,这只是一个优化。