0

我對Blobstore如何與每個實體提供圖片一起工作感到困惑。實體圖片+ Blobstore

所以我們可以說我有:

class Book(ndb.Model): 
    title = ndb.StringProperty() 
    cover_image = ndb.BlobProperty() 

我怎麼能輸出這些信息在Jinja2的模板,像這樣:

<h1>{{title}}</h1> 
{{cover_image}} 

我的困惑從我不清楚自己莖如何Blob存儲區和數據存儲一起工作。例如:我們如何將數據存儲的實體與Blobstore屬性相關聯(在我們的示例中,它將cover_image blobproperty與其Book實體關聯)?

一個簡單的解釋將不勝感激。謝謝。

回答

1

你所尋找的是get_serving_url(blob_key, size=None, crop=False, secure_url=None)

試試這個方法在blob上,你會得到一個圖像的網址。

Docs

你上傳的斑點,你會得到你存儲的BlobKey。想象它像另一個實體的關鍵。 然後,使用該密鑰,您可以使用get_serving url和其他幾個函數來提供url,調整大小等。

0

您可以在模型中使用BlobKeyProperty來維護數據存儲和Blobstore之間的引用。例如:

class MyContent (ndb.Model): 
    Image = ndb.BlobKeyProperty() 

然後,如果你需要經常得到相關的URL,你甚至還可以存儲服務網址:

class MyContent (ndb.Model): 
    Image = ndb.BlobKeyProperty() 
    ImageServingURL = ndb.StringProperty() 
0

您可以創建用於獲取圖像的不同處理程序。你這樣做取決於使用的框架。金字塔的例子(沒有嘗試,節選):

#handler /{bookid}/coverimage 
def RenderImage(request): 
    book_key = request.matchdict['bookid'] 
    book = Key(urlsafe=book_key}.get() 
    cover = book.cover_image 
    #optional rezising: 
    cover = images.resize(cover, WIDTH, HEIGHT) #or other image operations 

    response = Response(content_type="image/jpeg") 
        response.body = cover 
        return response 

在模板:

<img src="/{{book.key.urlsafe()}}/coverimage" /> 

注意:您可以爲任何圖像財產做一個通用的圖像處理程序,不僅「cover_image」