【问题标题】:How to output a graph from Matplotlib in Django templates?如何在 Django 模板中从 Matplotlib 输出图形?
【发布时间】:2011-04-11 09:49:33
【问题描述】:

这个例子取自here:

def simple(request):
    import random

    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    from matplotlib.figure import Figure
    from matplotlib.dates import DateFormatter

    fig=Figure()
    ax=fig.add_subplot(111)
    x=[]
    y=[]
    now=datetime.datetime.now()
    delta=datetime.timedelta(days=1)
    for i in range(10):
        x.append(now)
        now+=delta
        y.append(random.randint(0, 1000))
    ax.plot_date(x, y, '-')
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
    fig.autofmt_xdate()
    canvas=FigureCanvas(fig)
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

如何以使用模板和变量的方式编写视图,例如: return render_to_response ('template.html',{'graph': <graph generated by matplotlib> }

【问题讨论】:

    标签: python django graph django-templates matplotlib


    【解决方案1】:

    当我遇到类似情况时,我使用了两种视图。一个使用 matplotilb 生成 PNG,而另一个使用 django 模板创建一个呈现 PNG(和一些其他数据)的 HTML 页面。发送到模板的参数只是 PNG 文件名。然后将另一个视图附加到适当的 .png URL。

    一个问题是如果你想计算一些用于生成 HTML 和 PNG 的参数。我在文件名中编码了这些信息。这很痛苦,而且有点 hacky,但如果用户保存文件时所有信息都在文件名中,这对用户也有好处。

    【讨论】:

    • 我想你不知道另一个库/包会这样做吗?真的想避免为每种类型的图表编写 2 个视图。
    • 所以你必须将每个图表写入表格并再次调用它?
    • 我认为拥有两个视图是很自然的事情,因为涉及到两个 URL。一个用于 PNG 文件,一个用于 HTML 包装页。可能你只想提供 PNG,没有包装页,但在这种情况下,我根本看不到 django 模板是如何进入其中的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多