使用Jinja的groupby过滤器和元组

时间:2016-11-08 20:33:21

标签: python flask sqlalchemy jinja2

我正在构建一个带有Jinja2模板的Flask应用程序,并从Flask-SQLAlchemy提供数据。我想基于一个查询来构建一个视图(有效列表),该查询为我提供了一个包含两个对象(UserRegistration)的元组:

eligible_racers = db.session.query(User, Registration).filter(User.id==Registration.racer_id).filter(Registration.team_id==team_id).filter(Registration.season_id==race.season_id).all()

在我的模板中,我想根据Registration对象的属性对结果进行分组。 grouby过滤器似乎很理想,但似乎没有办法将其传递给其中一个元组成员的属性。

在我的模板中有优雅的方法吗?或者我是否需要在Python视图代码中进行分组并将模板传递给结构不同的数据(请记住,我需要保持用户和注册配对)?

1 个答案:

答案 0 :(得分:1)

一些Jinja过滤器(包括groupby)通过将属性与.分开来处理多级属性查找。 SQLAlchemy查询返回带键的元组,其名称为selectable(在本例中为模型)作为属性名称。

{% for level, items in racers|groupby('Registration.level') %}
    {{ level }}
    {% for user, registration in items %}
        {{ user.name }}
    {% endfor %}
{% endfor %}

你也可以使用1.level,索引查找也可以。