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

前端 未结 5 1851
死守一世寂寞
死守一世寂寞 2020-12-28 19:36

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

相关标签:
5条回答
  • 2020-12-28 19:50

    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 %}
    0 讨论(0)
  • 2020-12-28 20:03

    Use django-mathfilters. The addition filter doesn't coerce numbers to integer so you can add floats:

    {% load mathfilters %}
    {{ num1 | addition:num2 }}
    
    0 讨论(0)
  • 2020-12-28 20:11

    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

    0 讨论(0)
  • 2020-12-28 20:13

    There is the filter 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.

    0 讨论(0)
  • 2020-12-28 20:15

    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.

    0 讨论(0)
提交回复
热议问题