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.

Respostas:


154

Você pode usar o addfiltro:

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

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


19

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


Como você faz isso dentro do loop no template?
bismigalis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.