Jak wykonywać obliczenia matematyczne w szablonie Django?

104

Chce to zrobić:

100 - {{ object.article.rating_score }} 

Tak na przykład, wyjście byłoby 20gdyby {{ object.article.rating_score }}wyniósł 80.

Jak to zrobić na poziomie szablonu? Nie mam dostępu do kodu Pythona.

Tommy
źródło

Odpowiedzi:

155

Możesz użyć addfiltra:

{{ object.article.rating_score|add:"-100" }}
Daniel Roseman
źródło
37
Do mnożenia i dzielenia możesz nadużywać wbudowanego widthratiotagu szablonu. Aby obliczyć użycie a * b {% widthratio a 1 b %}, dla użycia a / b {% widthratio a b 1 %}. Jedyną wadą jest to, że wyniki są zaokrąglane do liczby całkowitej przed zwróceniem. Używanie tagu szablonu współczynnika szerokości Django do mnożenia i dzielenia
elim
2
@Erik to powinna być jego własna odpowiedź - dużo lepsze rozwiązanie.
nhinkle
1
Zaktualizowany link do dodania w Dokumentach
rnevius
A jeśli użyję w ten sposób: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan
@Daniel Roseman, czy mogę dodać wartość procentową w ten sposób: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan
31

Użyj django-mathfilters . Oprócz wbudowanego filtra dodawania zapewnia filtry do odejmowania, mnożenia, dzielenia i pobierania wartości bezwzględnych.

W konkretnym przykładzie powyżej użyłbyś {{ 100|sub:object.article.rating_score }}.

Erik
źródło
20

Ogólnie zaleca się wykonanie tego obliczenia w swoim widoku. W przeciwnym razie możesz użyć filtra dodawania.

bdd
źródło
Jak to zrobić wewnątrz pętli w szablonie?
bismigalis