Google App Engine: Получить ключ сущности для использования в шаблоне - PullRequest
3 голосов
/ 30 октября 2010

При условии, что у меня есть следующее:

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 ]

6 голосов
/ 30 октября 2010

Используйте {{person.key.id}}, а не только {{id}}.Это вызовет методы .key().id() каждого объекта.

Однако вы также должны знать, что передача Person.all() в качестве значения шаблона не обязательно является хорошей идеей;.all() возвращает объект db.Query, который можно рассматривать как повторяемый, как вы делаете, но который будет делать несколько RPC при выполнении итерации по запросу;вместо этого вы должны использовать что-то вроде Person.all().fetch(SOME_NUMBER), где SOME_NUMBER - разумное количество для отображения пользователю (или произвольно большое число, если вы настаиваете на попытке отобразить все в одном представлении.)

0 голосов
/ 31 октября 2010

Нашли решение в одном из примеров кода:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...