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.

Tommy
la source

Réponses:

154

Vous pouvez utiliser le addfiltre:

{{ object.article.rating_score|add:"-100" }}
Daniel Roseman
la source
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 }}.

Erik
la source
19

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

bdd
la source
Comment le faites-vous à l'intérieur de la boucle dans le modèle?
bismigalis