Как делать математику в шаблоне Django?

104

Я хочу сделать это:

100 - {{ object.article.rating_score }} 

Так, например, результат будет , 20если {{ object.article.rating_score }}равен 80.

Как это сделать на уровне шаблона? У меня нет доступа к коду Python.

Томми
источник

Ответы:

155

Вы можете использовать addфильтр:

{{ object.article.rating_score|add:"-100" }}
Дэниел Розман
источник
37
Для умножения и деления вы можете неправильно использовать встроенный widthratioтег шаблона. Для вычисления a * b используйте {% widthratio a 1 b %}, для a / b используйте {% widthratio a b 1 %}. Единственный недостаток, результаты округляются до целого числа перед возвратом. Использование тега шаблона Django widthratio для умножения и деления
elim
2
@Erik, это должен быть отдельный ответ - гораздо лучшее решение.
nhinkle
1
Обновлена ​​ссылка для добавления в Документы
rnevius
Что, если я использую вот так: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Мушахид Хан
@Daniel Roseman, могу я добавить после применения процентного соотношения вот так: {{object.article.rating_score | add: "{% widthratio object.article.rating_score 100 5%}"}}
Мушахид Хан
31

Используйте django-mathfilters . Помимо встроенного фильтра сложения, он предоставляет фильтры для вычитания, умножения, деления и получения абсолютного значения.

Для конкретного примера выше вы должны использовать {{ 100|sub:object.article.rating_score }}.

Эрик
источник
20

Обычно рекомендуется выполнять этот расчет в вашем представлении. В противном случае вы можете использовать фильтр добавления.

bdd
источник
Как вы это делаете внутри цикла в шаблоне?
bismigalis