2009-06-05 10 views
2

Ich zeige die Anzahl der Suchergebnisse an, jedoch mache ich mehr als eine Suche. Um die Anzahl der Ergebnisse anzuzeigen, müsste ich sie addieren. Also habe ich das versucht:Django: Anzahl der Ergebnisse hinzufügen

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

Aber ich erhalte eine Fehlermeldung. Wie mache ich das?

Antwort

3

Ich würde dies Ihrer Ansicht nach tun, wenn Sie Ihren Kontext-Wörterbuch erstellen:

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

Dann in Ihrer Vorlage, verwenden Sie einfach:

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

Das funktioniert super, danke! – R0b0tn1k

4

Django-Vorlagen unterstützen keine arithmetischen Operatoren. Sie können jedoch den Filter add verwenden. Ich glaube, Sie so etwas wie dieses brauchen:

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

Alternativ sollten Sie die Summe in der Ansicht berechnen und übergeben es auf die Vorlage vorausberechnet.

EDIT: Zusätzlich zu den Kommentaren, sollten diese Version arbeiten:

{% with categories|length as catlen %} 
{% with companies|length as complen %} 
<p>Found {{ products|length|add:catlen|add:complen }} results.</p> 
{% endwith %} 
{% endwith %} 

Dies ist jedoch sehr hacky fühlt und es wäre besser, die Figur in der Ansicht zu berechnen.

+0

Wenn ich 'bla | length | add: blarg | length 'teste ich TemplateSyntaxError" in t() arg muss eine Zeichenkette oder eine Zahl sein ". – krubo

+0

Ihr Vorschlag bringt einen Fehler: int() Argument muss eine Zeichenfolge oder eine Zahl, nicht 'QuerySet' – R0b0tn1k

+0

Ich habe es funktioniert (siehe bearbeitete Antwort), aber Sie wäre besser dran, es in der Ansicht zu berechnen . – msanders

3

ich darauf hinweisen möchte, dass Van Gales Antwort ist nicht optimal. Von the QuerySet API documentation, sollten Sie query.count() eher nutzen als len (Abfrage)

A count() call performs a SELECT COUNT(*) behind the scenes, so you should always use count() rather than loading all of the record into Python objects and calling len() on the result (unless you need to load the objects into memory anyway, in which case len() will be faster).

So sollte die Antwort sein: Nach Ansicht:

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

Die Vorlage bleibt unverändert

Verwandte Themen