views:

823

answers:

2

How do I serve a dynamically generated image in Django?

I have an html tag

<html>
...
    <img src="images/dynamic_chart.png" />
...
</html>

linked up to this request handler, which creates an in-memory image

def chart(request):
    img = Image.new("RGB", (300,300), "#FFFFFF")
    data = [(i,randint(100,200)) for i in range(0,300,10)]
    draw = ImageDraw.Draw(img)
    draw.polygon(data, fill="#000000")
    # now what?
    return HttpResponse(output)

I also plan to change the requests to AJAX, and add some sort of caching mechanism, but my understanding is that wouldn't affect this part of the solution.

+1  A: 

I'm relatively new to Django myself. I haven't been able to find anything in Django itself, but I have stumbled upon a project on Google Code that may be of some help to you:

django-dynamic-media-serve

geowa4
Good link, might be useful when I get to the caching stage
pufferfish
+4  A: 

I assume you're using PIL (Python Imaging Library). You need to replace your last line with (for example, if you want to serve a PNG image):

response = HttpResponse(mimetype="image/png")
img.save(response, "PNG")
return response

See here for more information.

Vinay Sajip
I'm using PIL for this example but probably going to use other libraries like matplotlib. Should work too though.
pufferfish
If you are going to use matplotlib, you may want to have a look at http://scipy.org/Cookbook/Matplotlib/Django
Tim Whitcomb