Google Appengine: объекты, переданные в шаблон, изменяют свои адреса в памяти - PullRequest
1 голос
/ 01 сентября 2010

Я запрашиваю массив объектов из БД, затем сравниваю адреса объектов в Model и View.Они отличаются!Зачем?Я хочу получить доступ к тем же объектам, что и из шаблона, как и из кода бизнес-логики.

Я бы не стал просить об этом, но это действительно беспокоит меня, потому что вызовы функций запрещены в шаблонах в стиле Django, и я даже не могу назначитьнастраиваемые свойства для DB-объектов в коде бизнес-логики.

В обработчике запросов:

from google.appengine.ext.webapp import template

cats = db.GqlQuery("SELECT * FROM Cats")
for cat in cats:
  self.response.out.write("<li>%s</li>" % (a))

В шаблоне:

{% for a in articles %}
  {{a}},
{% endfor %}

Адреса (хеш-коды) отличаютсятакой код.

1 Ответ

4 голосов
/ 01 сентября 2010

Когда вы используете итератор запросов, вы фактически делаете несколько выборок последовательно, каждая из которых приведет к созданию нового экземпляра модели.

Вместо того, чтобы делать:

cats = db.GqlQuery("SELECT * FROM Cats")
for cat in cats:
    ...

... сделайте это вместо:

cats = db.GqlQuery("SELECT * FROM Cats").fetch(50)
for cat in cats:
    ...

И передать список кошек в шаблон. У вас будут те же списки в обработчике и шаблоне, поскольку каждый объект загружается в экземпляр модели только один раз.

...