Google应用引擎,模板:实体键变成类似于网址编码的字符串

时间:2012-12-19 14:20:55

标签: google-app-engine templates

我尝试将元组列表传递给模板系统,包括实体密钥。但是,传递给模板的键看起来像是一个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 /image?entity_id=%3Cbound%20method%20Product.key%20of%20%3Cmodel.Product%20object%20at%200xad63f2c%3E%3E HTTP / 1.1“404 - < / p>

2 个答案:

答案 0 :(得分:0)

由于您使用的是原始数据库而不是ndb。 key是一种方法 - 正如您可以从值中看到的那样,它表示“绑定方法Product.key ...”。你需要打电话给它:

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

答案 1 :(得分:0)

我建议您在网址中使用NDB API提供的网址安全编码字符串,因为与原始密钥相比,它更优雅。

因此,您可以通过以下方式创建它:

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

在处理程序中,您可以根据编码的urlsafe字符串重建Key:

my_key = ndb.Key(urlsafe=your_encoded_string)

有关详细信息,请查看NDB Key class