【问题标题】:Google Appengine: objects passed to a template changes their addresses in memoryGoogle Appengine:传递给模板的对象会更改它们在内存中的地址
【发布时间】:2010-08-31 22:05:58
【问题描述】:

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

我不会要求它,但它真的让我很困扰,因为函数调用在 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 %}

地址(哈希码)在此类代码中有所不同。

【问题讨论】:

    标签: python google-app-engine templates


    【解决方案1】:

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

    而不是做:

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

    ...改为这样做:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2016-12-23
      相关资源
      最近更新 更多