2009-06-05 9 views
2

J'affiche le nombre de résultats de recherche, cependant, je fais plus d'une recherche. Donc, pour afficher le nombre de résultats, je devrais les additionner. J'ai donc essayé ceci:Django: Ajouter le nombre de résultats

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

mais je reçois une erreur. Comment est-ce que je fais ceci?

Répondre

3

que je ferais dans votre vue lorsque vous créez votre contexte dictionnaire:

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

Ensuite, dans votre modèle, utilisez simplement:

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

Cela fonctionne très bien, merci! – R0b0tn1k

4

Les modèles Django ne prennent pas en charge les opérateurs arithmétiques. Cependant, vous pouvez utiliser le filtre add. Je pense que vous avez besoin de quelque chose comme ceci:

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

Sinon vous devez calculer le total dans la vue et le transmettre pré-calculé au modèle.

EDIT: Suite aux commentaires, cette version devrait fonctionner:

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

Cependant, cela se sent très hacky et il serait préférable de calculer la figure dans la vue.

+0

Lorsque j'essaie 'blah | length | add: blarg | longueur' je reçois TemplateSyntaxError" dans t() arg doit être une chaîne ou un nombre ". – krubo

+0

Votre suggestion génère une erreur: int() l'argument doit être une chaîne ou un nombre, pas 'QuerySet' – R0b0tn1k

+0

Je l'ai fait fonctionner (voir la réponse éditée), mais vous feriez mieux de le calculer dans la vue . – msanders

3

Je voudrais souligner que Van La réponse de Gale n'est pas optimale. De the QuerySet API documentation, vous devez utiliser query.count() plutôt que len (requête)

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).

La réponse devrait être: Dans la vue:

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

Le le template reste inchangé

Questions connexes