问题
The JS snippet I created relies on the forloop.counter variable being available within a {% for key, value in data.items %}..{% endfor %}
tag.
Is there a way to use mathematical operators (*, -, +, /) together with the forloop.counter
variable?
回答1:
There is the filter add add from the documentation.
I'm pretty sure there are no built-in way to use the other mathematical operations over numbers in Django templates. You can always make your own however. It is not always a good idea to do so.
You want to keep your logic inside the views and keep the rendering inside the templates.
In your case, you should store your counter in a JavaScript variable, and use it in your snippet.
回答2:
It's possible to use django built-in widthratio template tag and add filter:
- add 5 to forloop.counter
{{forloop.counter|add:5}}
- subtract 5 from forloop.counter
{{forloop.counter|add:"-5"}}
- devide forloop.counter by 5
{% widthratio forloop.counter 5 1 %}
- multiply forloop.counter by 5
{% widthratio forloop.counter 1 5 %}
回答3:
Use django-mathfilters. The addition
filter doesn't coerce numbers to integer so you can add floats:
{% load mathfilters %}
{{ num1 | addition:num2 }}
回答4:
I make the next in my template file carts.html
{% extends 'base.html'%} {% block contenido %}
<h1>Checkout</h1>
<p>Subtotal + IVA: ${{ orden.sub_total }}</p>
<p>Envio:$ {{ orden.costo_envio }}</p>
<p>Total a pagar:$ {{ orden.sub_total|add:orden.costo_envio }}</p>
{% endblock %}
where my view based function is:
def carrito_checkout(request):
if 'cart_id' in request.session:
orden_object, created = Orden.objects.get_or_new(request)
if orden_object is None:
return redirect('carrito:home')
print(orden_object)
context = {
"orden": orden_object
}
return render(request, 'carrito_checkout.html', context=context)
For me this aproach works fine
回答5:
After Mathieu Marques tips, here's what I did using custom filter.
The template is rendering 5 record per page after using pagination snippet. The per page presentation reset the forloop.counter. To create a continous counter per page..
from django import template
register = template.Library()
@register.filter(name='cei')
def compute_exact_id(value, rb_page_no):
new_id = value+(5*(rb_page_no-1)) ## here's the mathematical operation
return new_id
where rb_page_no
is the current page number and placing {% load extra_filter %}
on top my template where extra_filter is the file name where I place the compute_exact_id
.
来源:https://stackoverflow.com/questions/18331591/how-to-add-multiply-number-variables-in-a-django-template