gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:35:13 29 4
gpt4 key购买 nike

我正在尝试为表中的每一行数据编写一个详细页面。我想使用每行的数据为每个页面动态生成一个 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com