当通过查询数据库创建对象列表时,如何找到 jinja 模板中对象列表的长度?
我以为
There are {{ items|length }} items in this category.
会起作用,但项目是以下结果:
items = db_session.query(Item).filter_by(category_id=category.id)
我得到了错误
类型错误:“查询”类型的对象没有 len()
显然,我可以单独计算长度并传入
render_template()
,但我想知道是否有更好的方法?
非常感谢社区的任何帮助:)
items
对象还不是列表,它是一个未处理的 Query
对象,如您在错误中看到的那样。您可以使用 Query.all()
方法来获取项目列表:
items = db_session.query(Item).filter_by(category_id=category.id).all()
之后
length
过滤器就可以应用了。
在 jinja 模板中使用
{{ items | count }}
尝试添加循环控制扩展
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
然后
{% for item in items %}
{{loop.length}}
{% break %}
{% endfor %}
您可以将类型 oqueryset 转换为 list
items = list(db_session.query(Item).filter_by(category_id=category.id))