django - 将 matplotlib 与 Django 通用 View 结合使用

标签 django matplotlib detailview

我正在尝试为表中的每一行数据编写一个详细页面。我想使用每行的数据为每个页面动态生成一个 matplotlib 图。

我已经在正常 View 下尝试过代码并且它有效。但是,当与 detail_view 页面一起使用时,图像显示为损坏的链接。我应该在 DetailView 类中包含什么来生成每个页面的图表?

graph.py:

def plotResults(request):
    p=get_object_or_404(Read_alignment,pk=id)
    x =[]
    y=[]
    x.append(p.start)
    x.append(p.stop)
    y.append(p.count)
    y.append(p.count)
    fig=plt.figure()
    ax= fig.add_subplot(311)
    ax.set_xlim(right=30)
    ax.step(x,y,'-',where='post', label='post')
    canvas = FigureCanvas(fig)
    response= HttpResponse(mimetype='image/png')
    canvas.print_png(response)
    return response
<小时/>

url.py:

url(r'^(?P<pk>\d+)/align/plotResults.png$',plotResults),
url(r'^(?P<pk>\d+)/align/$',AlignDetailView.as_view(), name='AlignDetailView'),
<小时/>

views.py:

class AlignDetailView(DetailView):
    model = Read_alignment

    def get_queryset(self):
        queryset= Read_alignment.objects.filter(chr__icontains=3l)
        return queryset

    def get_context_data(self, **kwargs):
        context = super(AlignDetailView,self).get_context_data(**kwargs)
        context['alignment'] = self.object
        return context

我应该如何将图表链接到模板,最好没有静态或媒体标签?是否可以在不将 PNG 图像保存到静态文件夹的情况下生成图表?

最佳答案

有两种方法可以实现此目的,具体取决于您想要执行的操作。

  1. 如果您只想显示图像而不需要任何 HTML,那么只需使用普通函数 view rand 返回 HttpResponse或者如果您真的非常非常想使用基于类的 View 覆盖 get方法并返回 HttpResponse .

  2. 如果您想显示一个 HTML 页面,其中嵌入了图像。然后你可以做两件事

    1. 创建一个单独的 View ,该 View 将仅响应您在示例中所做的图像,并在 HTML 页面中添加 <img src="path to that view url" /> .

    2. 或者,如果您不希望图像有单独的 View ,则必须在 DetailView 中创建图像,将其保存到字节流,对其进行 base64 编码并将其返回到您的上下文中,如下所示(例如) image 。然后在模板中使用<img src="data:image/png;base64,{{ image }}"/>创建一个带有base64编码数据的图像标签。 .

关于django - 将 matplotlib 与 Django 通用 View 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18335124/

相关文章:

python - Django:将变量添加到模板上下文

django - 多个级别的 prefetch_related

python - Django Oracle App 提供 ORA-03113 和 ORA-03135

python通过偏移轮廓/缩小多边形来分离圆形粒子

Django 自定义左外连接

python - 我们可以在绘制 Python 图中的 x 轴后对其进行排序吗?

python - Seaborn 线图高 CPU;与 matplotlib 相比非常慢

yii2 - 如何在 Yii2 的详细 View 小部件中使用条件?

c# - 如何提高ASP.NET中GridView或DetailsView的效率?