GAE python在页面上显示多个图像

时间:2014-03-31 08:07:30

标签: python google-app-engine

我正在尝试在一个页面中显示多个图像(从数据存储中提取)。

这样做只显示1张图片......

class Stocks(db.Model):
   ticker = db.StringProperty()
   picture = db.BlobProperty(default=None)

我用什么来服务:

self.response.headers['Content-Type'] = 'image/jpeg'
self.response.out.write(stock.picture)

这是我服务图片的唯一方法吗? 我可以用多种图像响应输出的方式来做吗? 像这样的东西。

 self.response.out.write('<img src=' + stock.picture + '>')

更新:感谢您的回复。完全不知道你可以做那样的事情。

所以我这样做了:

app = webapp2.WSGIApplication([('/dailystocks', frontend_dailyStocks),('/image/.*', ServeImage),('/mainPage', MainPage)], debug=True)

然后这个:

class MainPage(webapp2.RequestHandler):
  def get(self):
    images = Stocks.all().fetch(100)
    html = ['<img src="/image/%s" />' % img.key() for img in images]
    self.response.out.write(html)    

class ServeImage(webapp2.RequestHandler):
  def get(self):
    key = self.request.get('key')
    image = Stocks.get(key)
    if image:
        self.response.headers['Content-Type'] = 'image/jpeg'
        self.response.out.write(image.picture)
    else:
        self.abort(404)

已加载的东西,但它显示了一个损坏的图像链接列表。

这是一个示例图片链接:

    http://*****.appspot.com/image/ag9zfmpwZ2V0bGlzdGluZ3NyEwsSBlN0b2NrcxiAgICAwOGGCAw

1 个答案:

答案 0 :(得分:4)

对于您要投放的每张图片,您需要单独的HTTP调用。因此,您可以编写一个处理器来处理图像,就像您建议的那样,如下所示:

class ServeImage(webapp2.RequestHandler):
  def get(self):
    key = self.request.get('key')
    image = Stocks.get(key)
    if image:
      self.response.headers['Content-Type'] = 'image/jpeg'
      self.response.out.write(image.picture)
    else:
      self.abort(404)

然后在你的主处理程序中,加载图像并渲染html,在每个img标记中引用ServeImage处理程序......

class MainPage(webapp2.RequestHandler):
  def get(self):
    images = Stocks.all().fetch(100)
    html = ['<img src="/image?key=%s" />' % img.key() for img in images]
    self.response.out.write(html)

您需要将url / image路由到ServeImage处理程序。