Hi

How about one view that takes arguments as either POST or GET params?

> You have to bear with me but where does background come from? So I can
> use the save() method from the PIL library is that right?

Ok so you can load a canvas.

Just to illustrate here is a view that puts dots on a map *map is the canvas.

specifically:
   try:
        background = Image.open(image_path)
        canvas = ImageDraw.Draw(background)
    except IOError:
        return HttpResponse(status=500)

Below is the full view...
I think this is what you want. Hope its makes things clearer.

def drawAllEvents(request, **kwargs):
    import Image, ImageDraw
    from datetime import datetime

    image_path = getattr(settings,'HOME_DIR')+'templates/images/front.gif'

    try:
        background = Image.open(image_path)
        canvas = ImageDraw.Draw(background)
    except IOError:
        return HttpResponse(status=500)

    if background.mode is not 'P':
        return HttpResponse(status=500)

    aa = 
Airfield.objects.filter(locality__event__dates__start__gte=datetime.now()).values('airfield_lat_dec','airfield_long_dec')
    ll = 
Location.objects.filter(locality__event__dates__start__gte=datetime.now()).values('location_lat_dec','location_long_dec')

    #---------------------------------------------------------------------
    def renderdot(latlon):
        #scaling relative to aeroclub map (204, 165) in pixels
        scale = float(Decimal(10)/Decimal(49))
        mx = 120 - 36*scale
        my = (-25 - (background.size[1] - 71)*scale)

        xcoord1 = round((latlon[1] - mx)/scale);
        ycoord1 = background.size[1] - round((latlon[0] - my)/scale);

        #bounding box of the ellipse
        xcoord2=xcoord1+5
        ycoord2=ycoord1+5

        canvas.ellipse([(xcoord1,ycoord1),(xcoord2, ycoord2)], fill=0)
    #---------------------------------------------------------------------

    for e in aa:
        renderdot( (float(e['airfield_lat_dec']),
float(e['airfield_long_dec'])) )
    for e in ll:
        renderdot( (float(e['location_lat_dec']),
float(e['location_long_dec'])) )

    response = HttpResponse(status=200, mimetype="image/gif")
    background.save(response, "GIF")
    return response




On Tue, Apr 12, 2011 at 2:33 PM, nai <chng.nai...@gmail.com> wrote:
> You have to bear with me but where does background come from? So I can
> use the save() method from the PIL library is that right?
>
> And I can do something like this:
>
> return render_to_response('template.html', {'graph':response})
>
> Where graph is just a variable in my django template (and not <img
> src="{{ graph }}" />)
>
> Is that right?
>
> On Apr 12, 12:03 pm, Sam Walters <mr.sam...@gmail.com> wrote:
>> Use python imaging:http://www.pythonware.com/products/pil/
>>
>> You can return a response with an image of the graph.
>>
>> response = HttpResponse(status=200, mimetype="image/gif")
>> background.save(response, "GIF")
>> return response
>>
>> There is no 'best practice for this' Some people i know use flash.
>> However dynamically generated images is good eg: no browser pluggins
>>
>> cheers
>>
>> sam_w
>>
>>
>>
>>
>>
>>
>>
>> On Tue, Apr 12, 2011 at 1:29 PM, nai <chng.nai...@gmail.com> wrote:
>>
>> > I will try to the 2 views method and see how I get on but in it would
>> > be great if you could answer my questions too!
>>
>> > Why does it go against best practices?
>>
>> > How would one go about doing it anyway?
>>
>> > On Apr 11, 6:39 pm, Xavier Ordoquy <xordo...@linovia.com> wrote:
>> >> Le 11 avr. 2011 à 12:21, nai a écrit :
>>
>> >> > This is the give example from Matplotlib for Django:
>>
>> >> > 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
>>
>> >> > Is there anyway I can return the image like this `return
>> >> > render_to_response('template.html', {'graph': <graph generated by
>> >> > matplotlib or some other graphing package>}`
>>
>> >> Hi,
>>
>> >> Is there any reasons why you couldn't have a view that would just render 
>> >> the image and the other one that would have a img tag pointing to the 
>> >> first view ?
>> >> It is possible to embed an image in the web page, but I'm sure it goes 
>> >> against the best practices.
>>
>> >> Regards,
>> >> Xavier.
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups 
>> > "Django users" group.
>> > To post to this group, send email to django-users@googlegroups.com.
>> > To unsubscribe from this group, send email to 
>> > django-users+unsubscr...@googlegroups.com.
>> > For more options, visit this group 
>> > athttp://groups.google.com/group/django-users?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to