如何在Django模板中添加,乘以数字变量?

时间:2013-08-20 09:30:16

标签: for-loop tags django-templates

我创建的JS片段依赖于{% for key, value in data.items %}..{% endfor %}标记内可用的forloop.counter变量。

有没有办法将数学运算符(*, - ,+,/)与forloop.counter变量一起使用?

5 个答案:

答案 0 :(得分:14)

文档中有过滤器add add

我很确定在Django模板中没有使用其他数学运算而不是数字的内置方法。但是,您可以随时make your own。这样做并不总是一个好主意。

您希望将逻辑保留在视图中并将渲染保留在模板中。

在您的情况下,您应将计数器存储在JavaScript变量中,并在代码段中使用它。

答案 1 :(得分:12)

可以使用django内置widthratio模板标记和add过滤器:

  • 将5添加到forloop.counter {{forloop.counter|add:5}}
  • 从forloop.counter {{forloop.counter|add:"-5"}}
  • 中减去5
  • 以5 {% widthratio forloop.counter 5 1 %}
  • 的形式发布forloop.counter
  • 将forloop.counter乘以5 {% widthratio forloop.counter 1 5 %}

答案 2 :(得分:4)

使用django-mathfiltersaddition过滤器不会将数字强制转换为整数,因此您可以添加浮点数:

{% load mathfilters %}
{{ num1 | addition:num2 }}

答案 3 :(得分:1)

在Mathieu Marques提示之后,这是我使用custom filter所做的事情。

使用分页片段后,模板每页渲染5条记录。每页演示文稿重置了forloop.counter。每页创建一个连续的计数器..

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

其中rb_page_no是当前页码并将{% load extra_filter %}放在我的模板顶部,其中extra_filter是我放置compute_exact_id的文件名。

答案 4 :(得分:1)

我在模板文件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 %}

我的基于视图的功能是:

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)

对我来说这个方法很好用

enter image description here