Как делать математику в шаблоне 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

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


Как вы это делаете внутри цикла в шаблоне?
bismigalis
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.