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 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
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To post to this group, send email to django...@googlegroups.com.
> To unsubscribe from this group, send email to django-users...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
>
>
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
<img src="/some/path/to/a/view" />
<img src="/some/path/to/a/view" />
so that path will call your other views which return content as
content_type='image/png' or whatever specific format you're using.
what i was suggesting is you could have:
<img src="/some/path/to/a/view/?foo=1" />
<img src="/some/path/to/a/view/?foo=2" />
<img src="/some/path/to/a/view/?foo=3" />
So in your urls.py file it would parameratize 'foo' and in your view
method you could produce different responses based on the parameter.
Eg: in an other view i have i can pass lat and long coords as params
and it would put a dot on the map based on where that lat/long points
to.