考虑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}}
这样的东西答案 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
的相应实例。