Comment faire des maths dans un template Django?


103

Je veux faire ça:

100 - {{ object.article.rating_score }} 

Ainsi, par exemple, la sortie serait 20si {{ object.article.rating_score }}égalée 80.

Comment faire cela au niveau du modèle? Je n'ai pas accès au code Python.

Réponses:


154

Vous pouvez utiliser le addfiltre:

{{ object.article.rating_score|add:"-100" }}

37
Pour la multiplication et la division, vous pouvez abuser de la widthratiobalise de modèle intégrée . Pour calculer a * b utilisez {% widthratio a 1 b %}, pour a / b utilisez {% widthratio a b 1 %}. Seul bémol, les résultats sont arrondis à un entier avant de revenir. Utilisation de la balise de modèle widthratio de Django pour la multiplication et la division
Élim

2
@Erik qui devrait être sa propre réponse - une bien meilleure solution.
nhinkle

1
Lien mis à jour pour ajouter dans la documentation
rnevius

Et si j'utilise comme ça: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan

@Daniel Roseman puis-je ajouter après avoir appliqué un pourcentage comme ceci: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan

31

Utilisez django-mathfilters . En plus du filtre d'ajout intégré, il fournit des filtres pour soustraire, multiplier, diviser et prendre la valeur absolue.

Pour l'exemple spécifique ci-dessus, vous utiliseriez {{ 100|sub:object.article.rating_score }}.


19

En général, il est recommandé de faire ce calcul dans votre vue. Sinon, vous pouvez utiliser le filtre d'ajout.


Comment le faites-vous à l'intérieur de la boucle dans le modèle?
bismigalis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.