Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 jinja模板中列表的长度,其中列表是DBSession.query的结果_Python 2.7_Jinja2_Flask Sqlalchemy - Fatal编程技术网

Python 2.7 jinja模板中列表的长度,其中列表是DBSession.query的结果

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(),但我想知道是否有更好的方法 社区的任何帮助都将不胜感激:

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

我以为
这一类中有{{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 %}