Python GoogleAppEngine:传递到模板的对象会更改其在内存中的地址

Python GoogleAppEngine:传递到模板的对象会更改其在内存中的地址,python,google-app-engine,templates,Python,Google App Engine,Templates,我从数据库中查询一个对象数组,然后比较模型和视图中对象的地址。他们不一样!为什么?我希望从模板访问与从业务逻辑代码访问相同的对象 我不会要求这样做,但这确实让我很烦恼,因为Django样式的模板中不允许函数调用,我甚至不能在业务逻辑代码中为DB对象分配自定义属性 在请求处理程序中: from google.appengine.ext.webapp import template cats = db.GqlQuery("SELECT * FROM Cats") for cat in cats:

我从数据库中查询一个对象数组,然后比较模型和视图中对象的地址。他们不一样!为什么?我希望从模板访问与从业务逻辑代码访问相同的对象

我不会要求这样做,但这确实让我很烦恼,因为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))

地址散列代码在这类代码中有所不同。

当您使用查询迭代器时,实际上您按顺序进行了多次回迁,每次回迁都将产生一个新的模型实例

而不是做:

cats = db.GqlQuery("SELECT * FROM Cats")
for cat in cats:
    ...
…改为这样做:

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

并将猫的列表传递给模板。处理程序和模板中都有相同的列表,因为每个实体只加载到模型实例中一次。

当您使用查询迭代器时,您实际上会按顺序进行多次获取,每一次都会生成一个新的模型实例

而不是做:

cats = db.GqlQuery("SELECT * FROM Cats")
for cat in cats:
    ...
…改为这样做:

cats = db.GqlQuery("SELECT * FROM Cats").fetch(50)
for cat in cats:
    ...
并将猫的列表传递给模板。处理程序和模板中会有相同的列表,因为每个实体只加载到模型实例中一次