How to add, multiply number variables in a Django template?

狂风中的少年 提交于 2019-12-20 10:43:34

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!