multiplication in django template without using manually created template tag
There are 2 approaches:
- Computing the values inside the view and pass them to the template (recommended in my opinion)
- Using template filters
In the manner of the add
filter, you could always create your own multiply
filter, creating your own custom filter:
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
Then in your template, something like that should work.
{{ quantity | multiply:price }}
This is not tested, and I never did this as - again - I find neater to compute datas inside the views and render only with the templates.
Another approach that I have used seems cleaner to me. If you are going through a queryset, it doesn't make sense to compute the values in your view. Instead, add the calculation as a function in your model!
Let's say your model looks like this:
Class LineItem:
product = models.ForeignKey(Product)
quantity = models.IntegerField()
price = models.DecimalField(decimal_places=2)
Simply add the following to the model:
def line_total(self):
return self.quantity * self.price
Now you can simply treat line_total as if it were a field in the record:
{{ line_item.line_total }}
This allows the line_total
value to be used anywhere, either in templates or views, and ensures that it is always consistent, without taking up space in the database.
You can use the built-in widthratio
template tag.
- a*b use
{% widthratio a 1 b %}
- a/b use
{% widthratio a b 1 %}
Note: the results are rounded to an integer before returning.
@see https://docs.djangoproject.com/en/dev/ref/templates/builtins/