Google App Engine:获取要在模板中使用的实体密钥

时间:2010-10-30 17:58:48

标签: python google-app-engine

假设我有以下内容:

class Person(db.Model):
  name = db.StringProperty()

我想使用模板在html文件中打印所有名称。

template_values = {'list': Person.all()}

模板看起来像这样:

{% for person in list %}
<form>
  <p>{{ person.name}} </p>
  <button type="button" name="**{{ person.id }}**">Delete!</button>
</form>
{% endfor %}

理想情况下,我想使用person.key或person.id然后能够使用密钥删除记录,但似乎不起作用。任何想法我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

使用{{person.key.id}},而不只是{{id}}。这将调用每个对象的.key().id()方法。

但是,您还应该知道,将Person.all()作为模板值传递并不一定是个好主意; .all()返回一个db.Query对象,可以将其视为可执行的迭代,但在迭代查询时会执行多个RPC;相反,您应该使用类似Person.all().fetch(SOME_NUMBER)的内容,其中SOME_NUMBER是向用户显示的合理数量(如果您坚持尝试在一个视图中显示所有内容,则为任意大数字。)

答案 1 :(得分:0)

在其中一个代码示例中找到解决方案:

template_values = {'list': **list**(Person.all())}

在模板中:

{% for person in list %}
<form>
  <p>{{ person.name}}</p>
  <button type="button" name="**{{ person.key }}**">Delete!</button>
</form>
{% endfor %}

正如Wooble建议的那样,你可能想尝试Person.all()。fetch(SOME_NUMBER)。