将blob参数传递给django

时间:2010-12-31 17:13:15

标签: python django google-app-engine

我将数据保存在数据库中作为blob:

class MyClass(db.Model):
    icon=db.BlobProperty()

现在,我想将blob发送到我的HTML,如下所示: 假设我有myClass作为MyClass

的实例
result = """<div img_attr=%s> Bla Bla </div>""" % (myClass.icon)

有些怎么做不起作用。你有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您不能只将原始图像数据转储到您的html页面。你需要分两部分来做这件事:

在您的HTML 中,您需要引用图片文件:

result = "<div>"
         "<img src='{0}' />"
         "</div>"
         .format(MYSITE + MYIMAGEDIR + myClass.name)

您的浏览器会读取html页面,发现您要包含图片,然后查找要包含的图片文件 - 因此它会向您的网站询问类似http://www.myexample.com/images/icon01.jpg

的内容

现在,您可以单独使用图片内容回复此第二个请求,如@anand所示。

答案 1 :(得分:0)

您的代码表明您正在使用Django处理Google应用程序引擎。

您只需要查看视图中的图像并将其作为http响应返回。

  

image = myclassObject.icon

     

response = HttpResponse(image)

     

response ['Content-Type'] ='image / jpg'

     

返回回复

答案 2 :(得分:0)

存储在数据存储中并由appengine返回的db.BlobProperty值不是blob的实际字节,而是用于引用它的BlobKey。有两种方法可以使用该密钥。您可以创建一个BlobReader来将blob的blob字节从BlobStore加载到您的应用程序中,或者您可以使用ServeHandler.send_blob制作响应以将这些字节传输到客户端。

在Django中执行第二个操作有点令人头疼,因为ServeHandler并不能很好地适应Django请求处理堆栈。这是一个可以帮助您的视图而不会有太多麻烦:

def get_image_data(request, key, filename):
  "serve original uploaded image"

  # verify the users' ability to get the requested image
  key = urllib.unquote(key)
  img = _load_metadata(request, key)
  blob = img.data;
  blobkey = blob.key()

  # and tell google to serve it
  response = http.HttpResponse(
      content='',
      content_type=blob.content_type)
  response['X-AppEngine-BlobKey'] = str(blobkey)
  return response