2012-12-19 22 views
1

我試圖將元組列表傳遞給模板系統,包括實體鍵。但是,傳遞給模板的鍵看起來像是一個url編碼的字符串。如何解決問題?謝謝。谷歌應用程序引擎,模板:實體鍵變得像一個URL編碼的字符串

視圖:

items = [] 
for i in range(50): 
    if prod[i]: 
     items.append((prod[i].name, prod[i].key, someList[i])) 
    else 
     items.append((None, None, otherList[i])) 

HTML模板:

{% for item in items %} 
    ... 
    <img src="/image?entity_id={{item.1}}" /> 
    ... 
{% endfor %} 

在圖像請求中的實體鍵原來是以下:

/GET /圖像ENTITY_ID =% 3Cbound%20method%20Product.key%20of%20%3Cmodel.Product%20object%20at%200xad63f2c%3E%3E HTTP/1.1「404 -

+0

它的網址編碼。你在使用什麼誘人的框架?你如何存儲這個值? –

+0

此外,關鍵是永遠不會存儲網址編碼。而且這是一個沒有逃脫等友好的密鑰。有些事情在這裏做錯了。 –

+2

以及:prod [i] .key?應該不是.key() –

回答

0

由於您使用的是原始數據庫庫而非ndb。 key是一種方法 - 正如您可以從值中看到的那樣,它顯示「bound method Product.key ...」。你需要調用它:

items.append((prod[i].name, prod[i].key(), someList[i])) 
+0

這解決了我的問題,謝謝。 –

0

我會建議使用由NDB API在您的網址所提供的安全編碼的字符串,因爲它相對於原始密鑰更優雅。

因此,你可以通過創建它:

items.append((prod[i].name, prod[i].key.urlsafe(), someList[i])) 

在你處理,你可以重建基於編碼urlsafe字符串作爲重點:

my_key = ndb.Key(urlsafe=your_encoded_string) 

欲瞭解更多信息,可以採取看看NDB Key class

相關問題