jinja模板中的列表长度,其中列表是DBSession.query

时间:2016-08-18 14:46:51

标签: python-2.7 jinja2 flask-sqlalchemy

当通过查询数据库创建对象列表时,如何在jinja模板中找到对象列表的长度?

我认为There are {{ items|length }} items in this category.会起作用,但项目的结果是:

items = db_session.query(Item).filter_by(category_id=category.id)

我收到了错误

  

TypeError:“Query”类型的对象没有len()

显然,我可以单独计算长度并传入render_template(),但我想知道是否有更好的方法?

非常感谢社区的任何帮助:)

3 个答案:

答案 0 :(得分:1)

在jinja模板中使用{{ items | count }}

答案 1 :(得分:0)

items对象还不是列表,它是一个未处理的Query对象,如您在错误中看到的那样。您可以使用Query.all()方法获取项目列表:

items = db_session.query(Item).filter_by(category_id=category.id).all()

之后length过滤器可适用。

答案 2 :(得分:0)

尝试添加loopcontrol扩展

app.jinja_env.add_extension('jinja2.ext.loopcontrols')

然后

{% for item in items %}
{{loop.length}}
{% break %}
{% endfor %}