如何访问Jinja2模板中引用对象的属性(Google App Engine)

时间:2014-09-04 21:53:40

标签: python google-app-engine jinja2 google-cloud-datastore app-engine-ndb

考虑Google App Engine中的以下数据模型

class A(ndb.Model):
    name = ndb.StringProperty()
    b = ndb.KeyProperty(Kind='B')

class B(ndb.Model):
    name = StringProperty()

现在假设在Python Http请求处理程序中我执行此查询

entities = A.query().fetch(200)

我将实体作为模板值传递给Jinja2模板

我在那里迭代像

这样的对象
{%for a in entities%}

  {{a.name}}

{% endfor %}

问题是:如何在Jinja2模板中访问A引用的B对象的属性?像{{a.b.name}}

这样的东西

2 个答案:

答案 0 :(得分:2)

你有实体的密钥(b),所以你可以直接得到它:

{% set b_entity = a.b.get() %}
{{ b_entity.name }}

(如果您在实体中有其他属性,请使用set。这样您只需要执行get()一次)

答案 1 :(得分:1)

这是ndb asyc api可能有用的情况......

@ndb.tasklet
def get_b_instances_from_a_instances(a_instance):
    b_instance = yield a_instance.b.get_async()
    raise ndb.Return((a_instance, b_instance))

entities = A.query().map(get_b_instances_from_a_instances, limit=200)

现在您的entities will be a list个2元组,其中每个元组都有一个A的实例,并且它是B的相应实例。