Джанго: Добавить количество результатов - PullRequest
2 голосов
/ 05 июня 2009

Я показываю количество результатов поиска, однако я делаю более одного поиска. Таким образом, чтобы отобразить количество результатов, мне нужно их сложить. Итак, я попробовал это:

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

Но я получаю ошибку. Как мне это сделать?

Ответы [ 3 ]

5 голосов
/ 05 июня 2009

Шаблоны Django не поддерживают арифметические операторы. Однако вы можете использовать фильтр add . Я думаю, вам нужно что-то вроде этого:

<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 %}

Тем не менее, это выглядит очень забавно, и было бы предпочтительнее рассчитать фигуру в представлении.

3 голосов
/ 20 июня 2012

Я хотел бы отметить, что ответ Ван Гейла не является оптимальным. Из документации API QuerySet следует использовать query.count () вместо len (запрос)

Вызов count () выполняет SELECT COUNT (*) за кулисами, поэтому вы всегда следует использовать count (), а не загружать всю запись в Объекты Python и вызов len () для результата (если вам не нужно загрузить объекты в память в любом случае, в этом случае len () будет быстрее).

Так что ответ должен быть: По мнению:

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

Шаблон остается без изменений

3 голосов
/ 05 июня 2009

Я бы сделал это по вашему мнению, когда вы создаете свой контекстный словарь:

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

Затем в вашем шаблоне просто используйте:

<p>Found {{ result_count }} results.</p>
...