Creación de contenedor HTML en django para imágenes matplotlib

Me gustaría tomar imágenes matplotlib generadas por Python e incrustarlas en una página HTML generada por django. Soy relativamente nuevo en Django y he estado luchando para que esto funcione. Puedo generar con éxito una imagen matplotlib sola en una página web pero no he podido incrustarla en una página HTML. Django tiene sentido ya que mi aplicación tendrá muchos usuarios que tendrán vistas personalizadas con diferentes datos y datos que cambian frecuentemente provenientes de una base de datos. Me gustaría evitar crear muchos archivos estáticos.

He visto varias publicaciones, pero claramente me falta algo. Por ejemplo: generar diagtwigs dynamics con Matplotlib en Django , imágenes en el sitio django de matplotlib y servir dinámicamente una imagen matplotlib en la web usando python .

Genero mi vista de imagen matplotlib con temp y creo que la envoltura es un detalle. los detalles no parecen funcionar. El nombre de archivo plotdata.py y bajo el tutorial de django sondeos de ejemplo

from datetime import datetime, time from django.http import HttpResponse from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure from django.contrib.auth.decorators import login_required from django.shortcuts import render @login_required() def temp(request,x_id): #... code to generate fig for ploting - works well #This works but does not seem to pass file to HTML canvas = FigureCanvas(fig) response = HttpResponse(content_type='image/png') canvas.print_png(response) return response @login_required() def detail(request, x_id): render(request, 'polls/plotdata.html', {'x_id': x_id}) 

Mi urls.py es el siguiente. la temperatura funciona bien

 from django.conf.urls import patterns, url from django.views.generic import DetailView, ListView from polls.models import Poll from polls import plotdata urlpatterns = patterns('', #polls url chopped out for brevity - follows tutorial url(r'^(?P\d+)/plotdata/temp.png$', plotdata.temp, name='temp'), url(r'^(?P\d+)/plotdata/detail$', plotdata.detail, name='detail'), ) 

Mi plotdata.html es el siguiente

     {% block title %}Plotting Template{% endblock %}   
{% block content %} {% endblock %}

El error generado es el siguiente.

 NoReverseMatch at /polls/1303070002/plotdata/detail Reverse for 'temp' with arguments '('1303070002',)' and keyword arguments '{}' not found. 

Este probablemente no sea el único problema con lo anterior. Estoy seguro de haberme perdido algo crítico.

Intenté hardcoding, como prueba, para

  

pero generó el siguiente error

 ValueError at /polls/1303070002/plotdata/detail The view polls.plotdata.detail didn't return an HttpResponse object. 

Me gustaría que este marco funcione para poder poner texto y botones en el diagtwig de datos. Estoy abierto a otras formas de crear una solución de manera más eficiente. ¡Muchas gracias por ayudarme!

El código reparado, plotadata.py, es el siguiente

  #same header information from above before this line canvas = FigureCanvas(fig) #This needs to remain for savefig or print_png command response = HttpResponse(content_type='image/png') fig.savefig(response, format='png') #Produces all white background return response def detail(request, salesorder_id): return render(request, 'rsa/plotdata.html', {'x_id':x_id}) 

Incluí el retorno antes del procesamiento esta vez … Cambié la ruta al archivo hmtl para evitar confusiones con la aplicación de encuestas. Usando savefig versus print_png, ya que formatea de manera más genérica. urls.py es lo mismo. Estoy intentando que plotdata.html funcione como se indica arriba, pasando una variable a la URL a través de {{x_id}} pero me falta algo. Mismo error que el anterior, NoReverseMatch. Si lo reemplazo, en plotdata.html

  

con

 {% load staticfiles %}  

la imagen está incrustada según lo deseado. Ahora agregando una ruta dinámica como

  

simplemente escapa del literal x_id => /rsa/%7B%7B%20x_id%20%7D%7D/plotdata/temp.png. Probar x_id | safe termina escapando del conducto e incluyendo la seguridad literal …% 7B% 7B% 20x_id% 7Csafe% 20% 7D% 7D. Por lo tanto, estoy tratando de volver a usar url versus estático. Parece más limpio. Creo que hay algo mal con la variable que estoy pasando, x_id