16

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

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

4

5 回答 5

29

可以使用 django 内置的widthratio模板标签并添加过滤器:

  • 将 5 添加到 forloop.counter{{forloop.counter|add:5}}
  • 从 forloop.counter 中减去 5{{forloop.counter|add:"-5"}}
  • 将 forloop.counter 除以 5{% widthratio forloop.counter 5 1 %}
  • 将 forloop.counter 乘以 5{% widthratio forloop.counter 1 5 %}
于 2015-07-10T15:13:30.793 回答
18

文档中有过滤器添加

我很确定没有内置方法可以在 Django 模板中对数字使用其他数学运算。但是,您始终可以自己制作。这样做并不总是一个好主意。

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

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

于 2013-08-20T10:22:36.823 回答
13

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

{% load mathfilters %}
{{ num1 | addition:num2 }}
于 2017-02-12T02:02:01.657 回答
3

我在我的模板文件 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)

对我来说,这种方法很好用

在此处输入图像描述

于 2018-04-08T18:35:42.327 回答
1

在 Mathieu Marques 提示之后,这是我使用自定义过滤器所做的。

使用分页片段后,模板每页呈现 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.

于 2013-08-20T11:05:35.760 回答