Como fazer matemática em um template Django?

103

Eu quero fazer isso:

100 - {{ object.article.rating_score }} 

Assim, por exemplo, a saída seria 20se {{ object.article.rating_score }}igualou 80.

Como faço isso no nível do modelo? Não tenho acesso ao código Python.

Tommy
fonte

Respostas:

154

Você pode usar o addfiltro:

{{ object.article.rating_score|add:"-100" }}
Daniel Roseman
fonte
37
Para multiplicação e divisão, você pode usar indevidamente a widthratiotag de modelo embutida . Para calcular a * b use {% widthratio a 1 b %}, para a / b use {% widthratio a b 1 %}. Única desvantagem, os resultados são arredondados para um número inteiro antes de retornar. Usando a tag de template widthratio do Django para multiplicação e divisão
elim
2
@Erik, essa deve ser a sua própria resposta - solução muito melhor.
nhinkle
1
Link atualizado para adicionar no Docs
rnevius
E se eu usar assim: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan
@Daniel Roseman posso adicionar depois de aplicar a porcentagem como esta: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Mushahid Khan
31

Use filtros django-math . Além do filtro de adição integrado, ele fornece filtros para subtrair, multiplicar, dividir e obter o valor absoluto.

Para o exemplo específico acima, você usaria {{ 100|sub:object.article.rating_score }}.

Erik
fonte
19

Geralmente, é recomendável que você faça este cálculo em sua visão. Caso contrário, você pode usar o filtro adicionar.

bdd
fonte
Como você faz isso dentro do loop no template?
bismigalis