3

我正在显示搜索结果的数量,但是,我进行了多次搜索。所以要显示结果的数量,我必须将它们加起来。所以我试过这个:

<p>Found {{ products|length + categories|length + companies|length }} results.</p>

但我得到一个错误。我该怎么做呢?

4

3 回答 3

6

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,最好在视图中计算图形。

于 2009-06-05T09:41:19.700 回答
3

当您创建上下文字典时,我会在您的视图中执行此操作:

'result_count': len(products) + len(categories) + len(companies)

然后,在您的模板中,只需使用:

<p>Found {{ result_count }} results.</p>
于 2009-06-05T09:42:39.497 回答
3

我想指出范盖尔的答案不是最佳的。从QuerySet API 文档中,您应该使用query.count()而不是len(query)

count() 调用在后台执行 SELECT COUNT(*),因此您应该始终使用 count() 而不是将所有记录加载到 Python 对象中并在结果上调用 len()(除非您需要加载对象无论如何都要进入内存,在这种情况下 len() 会更快)。

所以答案应该是:在视图中:

'result_count': products.count() + categories.count() + companies.count()

模板保持不变

于 2012-06-20T16:15:48.460 回答