Google Maps Ground Overlay不缓存Django提供的动态图像

时间:2013-02-21 14:48:14

标签: django caching google-maps-api-3 http-caching django-caching

我已在javascript中设置谷歌地图叠加层(v 3.10),以显示在服务器上生成的图像:

var overlay = new google.maps.GroundOverlay(url, MAP_BOUNDS, {map: gmap});

当url指向静态网址时,叠加层工作正常。但是,当它指向Django(v 1.4)动态URL时,图像显示正确但它会在滚动地图时继续向url发出服务器请求。例如:

url = 'localhost:8000/abcdef/maps/getMap'

在Django中urls.py:

url(r'^(?P<key>\S+)/maps/getMap/$', 'maps.views.getMap'),

网址重定向到此代码:

@csrf_exempt
def getMap(request, key):

    response = HttpResponse(mimetype="image/png")

    im=Image.open('media/maps' + id + '/map.png')
    im.save(response, 'PNG')

    return response

所以,在我看来谷歌地图/浏览器为了缓存而处理图像的方式有所不同,可能与HTTP标题中的内容有关。我怎样才能这样做,以便在检索到图像后不会继续发出服务器请求?

通过检查浏览器控制台中的响应标题,静态图像似乎具有“内容长度”和“内容长度”。和&#39; Last-Modified&#39;动态图像不是字段。不确定这是否相关。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

原来解决方案相对简单:

response = HttpResponse(image_data, mimetype="image/png")
response['Cache-Control'] = 'max-age=86400'
return response