Умножение в шаблоне django без использования созданного вручную тега шаблона
Я хочу получить операцию умножения в шаблоне django. Например
У меня есть значения, цена = 10,50 количество = 3
С помощью этой ссылки
http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/
Я попробовал ниже коды для его достижения,
{% widthratio quantity 1 price %}
но его возвращение только 31. Но мне нужен ответ в float (31.5)
И я хочу достичь этого без использования созданных вручную тегов
Как я могу это достичь?
Спасибо заранее...
Ответы
Ответ 1
Вы можете использовать встроенный тег шаблона widthratio
.
- a * b использовать
{% widthratio a 1 b %}
- a/b use
{% widthratio a b 1 %}
Примечание. Перед возвратом результаты округляются до целого числа.
@see https://docs.djangoproject.com/en/dev/ref/templates/builtins/
Ответ 2
Есть 2 подхода:
- Вычисление значений внутри представления и передача их в шаблон (рекомендуется на мой взгляд)
- Использование шаблонных фильтров
add
фильтру add
, вы всегда можете создать свой собственный фильтр multiply
, создав собственный настраиваемый фильтр:
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
Тогда в вашем шаблоне что-то подобное должно работать.
{{ quantity | multiply:price }}
Это не проверено, и я никогда не делал этого, поскольку, опять же, я нахожу более подходящим для вычисления данных внутри представлений и рендеринга только с помощью шаблонов.
Ответ 3
Другой подход, который я использовал, кажется мне более чистым. Если вы просматриваете запрос, нет смысла вычислять значения в вашем представлении. Вместо этого добавьте вычисление как функцию в вашу модель!
Скажем, ваша модель выглядит так:
Class LineItem:
product = models.ForeignKey(Product)
quantity = models.IntegerField()
price = models.DecimalField(decimal_places=2)
Просто добавьте к модели следующее:
def line_total(self):
return self.quantity * self.price
Теперь вы можете просто обрабатывать line_total, как если бы это было поле в записи:
{{ line_item.line_total }}
Это позволяет использовать значение line_total
в любом месте, будь то в шаблонах или представлениях, и гарантирует, что он всегда согласован, не занимая места в базе данных.