我正在显示搜索结果的数量,但是,我进行了多次搜索。所以要显示结果的数量,我必须将它们加起来。所以我试过这个:
<p>Found {{ products|length + categories|length + companies|length }} results.</p>
但我得到一个错误。我该怎么做呢?
Django 模板不支持算术运算符。但是,您可以使用添加过滤器。我认为你需要这样的东西:
<p>Found {{ products|length|add:categories|length|add:companies|length }} results.</p>
或者,您应该计算视图中的总数并将其传递给预先计算的模板。
编辑:除了评论,这个版本应该可以工作:
{% with categories|length as catlen %}
{% with companies|length as complen %}
<p>Found {{ products|length|add:catlen|add:complen }} results.</p>
{% endwith %}
{% endwith %}
但是,这感觉非常hacky,最好在视图中计算图形。
当您创建上下文字典时,我会在您的视图中执行此操作:
'result_count': len(products) + len(categories) + len(companies)
然后,在您的模板中,只需使用:
<p>Found {{ result_count }} results.</p>
我想指出范盖尔的答案不是最佳的。从QuerySet API 文档中,您应该使用query.count()而不是len(query)
count() 调用在后台执行 SELECT COUNT(*),因此您应该始终使用 count() 而不是将所有记录加载到 Python 对象中并在结果上调用 len()(除非您需要加载对象无论如何都要进入内存,在这种情况下 len() 会更快)。
所以答案应该是:在视图中:
'result_count': products.count() + categories.count() + companies.count()
模板保持不变