Python 2.7 jinja模板中列表的长度,其中列表是DBSession.query的结果
当通过查询数据库创建对象列表时,如何在jinja模板中查找对象列表的长度 我以为Python 2.7 jinja模板中列表的长度,其中列表是DBSession.query的结果,python-2.7,jinja2,flask-sqlalchemy,Python 2.7,Jinja2,Flask Sqlalchemy,当通过查询数据库创建对象列表时,如何在jinja模板中查找对象列表的长度 我以为这一类中有{{items | length}}项。可以,但这些项是由以下因素造成的: items = db_session.query(Item).filter_by(category_id=category.id) 我得到了错误 TypeError:类型为“Query”的对象没有len() 显然,我可以单独计算长度并传递到render_template(),但我想知道是否有更好的方法 社区的任何帮助都将不胜感激:
这一类中有{{items | length}}项。
可以,但这些项是由以下因素造成的:
items = db_session.query(Item).filter_by(category_id=category.id)
我得到了错误
TypeError:类型为“Query”的对象没有len()
显然,我可以单独计算长度并传递到render_template()
,但我想知道是否有更好的方法
社区的任何帮助都将不胜感激:)
项目
对象还不是列表,它是一个未处理的查询
对象,正如您在错误中看到的那样。您可以使用Query.all()
方法获取项目列表:
items = db_session.query(Item).filter_by(category_id=category.id).all()
之后可以使用
length
过滤器。在jinja模板中使用{{items | count}}
尝试添加loopcontrol扩展
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
然后
谢谢你,谢尔盖。我没有意识到。所有的都不见了。奇怪的是,我怎么能使用未完成的查询在jinja中循环遍历对象(即使它未完成),但长度筛选器不起作用。@SimonOtter有可能:
query
object作为生成器工作,您可以在不调用all()
的情况下对其进行迭代。这个特性也可以在jinja模板中使用,所以你的循环代码工作得很好。我想如果项
非常大,这是不适用的。
{% for item in items %}
{{loop.length}}
{% break %}
{% endfor %}