我创建的JS片段依赖于{% for key, value in data.items %}..{% endfor %}
标记内可用的forloop.counter变量。
有没有办法将数学运算符(*, - ,+,/)与forloop.counter
变量一起使用?
答案 0 :(得分:14)
我很确定在Django模板中没有使用其他数学运算而不是数字的内置方法。但是,您可以随时make your own。这样做并不总是一个好主意。
您希望将逻辑保留在视图中并将渲染保留在模板中。
在您的情况下,您应将计数器存储在JavaScript变量中,并在代码段中使用它。
答案 1 :(得分:12)
可以使用django内置widthratio模板标记和add过滤器:
{{forloop.counter|add:5}}
{{forloop.counter|add:"-5"}}
{% widthratio forloop.counter 5 1 %}
{% widthratio forloop.counter 1 5 %}
答案 2 :(得分:4)
使用django-mathfilters。 addition
过滤器不会将数字强制转换为整数,因此您可以添加浮点数:
{% 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)
对我来说这个方法很好用