如何使用嵌入式Python代码在jinja2模板中正确调用和使用变量?

时间:2012-08-09 13:18:23

标签: python google-app-engine jinja2

我有这两个类:

class Person(db.Model):
    person_name = db.StringProperty(required = True)
    #gender = db.StringProperty(required = True)
    nacionality = db.StringProperty(required = True)
    marital_status = db.StringProperty(required = True)
    profession = db.StringProperty(required = True)
    SSN = db.IntegerProperty(required = True)
    driver_license = db.IntegerProperty(required = True)
    address = db.PostalAddressProperty(required = True)

class ContractingParty(db.Model):
    person = db.ReferenceProperty(Person, required=True, collection_name="party_to_contracts")
    contract = db.ReferenceProperty(Contract, required=True)
    condition = db.StringProperty()

我想将ContractingParty实体的查询传递给我的jinja2模板。然后使用for loop,我想从Person实体获取我真正想要的数据。缔约方查询正在传递给jinja2(如果我测试它,我可以看到类似这样的内容:[<main.ContractingParty object at 0x0492D770>])。但是for loop下方没有效果,for loop的信息没有显示在我的追宝者身上。我该怎么办呢?

{% for party in parties %}
     <li> {{party.person.person_name}} </li>
{% endfor %}

1 个答案:

答案 0 :(得分:5)

好像你在for循环结构中犯了一个错误,必须省略冒号字符:

{% for party in parties %}

必须更改整个代码以实际呈现传递给模板的对象。你不能在这里执行Python代码,你必须遵守Jinja2语法:

{% for party in parties %}
    <li>{{ party.person.profession}}</li>
    ...
{% endfor %}

如果你想做一些作业,请使用设置 Jinja的标签:

{% set person = party.person %}

我希望你有这个想法,这里有一个link,有更多的澄清