Умножить в шаблоне django
Я перебираю элементы корзины и хочу умножить количество на удельную цену, как это:
{% for cart_item in cart.cartitem_set.all %}
{{cart_item.quantity}}*{{cart_item.unit_price}}
{% endfor %}
можно ли сделать что-то подобное? любой другой способ сделать это !! Спасибо
4 ответов
вам нужно использовать пользовательский тег шаблона. Фильтры шаблонов принимают только один аргумент, в то время как пользовательский тег шаблона может принимать столько параметров, сколько вам нужно, умножать и возвращать значение в контекст.
вы захотите проверить Django документация по тегам шаблона, но быстрый пример:
@register.simple_tag()
def multiply(qty, unit_price, *args, **kwargs):
# you would need to do any localization of the result here
return qty * unit_price
который вы можете назвать так:
{% load your_custom_template_tags %}
{% for cart_item in cart.cartitem_set.all %}
{% multiply cart_item.quantity cart_item.unit_price %}
{% endfor %}
вы уверены, что не хотите сделать этот результат свойством тележка? Казалось бы, вам нужна эта информация как часть вашей корзины, когда вы делаете свой заказ.
можно использовать widthratio
встроенный фильтр для умножения и деления.
для вычисления A*B: {% widthratio A 1 B %}
для вычисления A/B: {% widthratio A B 1 %}
источник: ссылке
Примечание: Для иррациональных чисел, результат округляется до целого числа.
или вы можете установить свойство модели:
class CartItem(models.Model):
cart = models.ForeignKey(Cart)
item = models.ForeignKey(Supplier)
quantity = models.IntegerField(default=0)
@property
def total_cost(self):
return self.quantity * self.item.retail_price
def __unicode__(self):
return self.item.product_name
Вы можете сделать это в шаблоне с фильтрами.
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
из документации:
вот пример определения фильтра:
def cut(value, arg):
"""Removes all values of arg from the given string"""
return value.replace(arg, '')
а вот пример того, как этот фильтр будет использоваться:
{{ somevariable|cut:"0" }}