Фрагмент кода JS, который я создал, основан на переменной forloop.counter, доступной в теге {% for key, value in data.items %}..{% endfor %}
.
Есть ли способ использовать математические операторы (*, -, +, /) вместе с переменной forloop.counter
?
Фрагмент кода JS, который я создал, основан на переменной forloop.counter, доступной в теге {% for key, value in data.items %}..{% endfor %}
.
Есть ли способ использовать математические операторы (*, -, +, /) вместе с переменной forloop.counter
?
В документации есть фильтр add.
Я почти уверен, что в шаблонах Django нет встроенного способа использовать другие математические операции над числами. Вы всегда можете создать свой собственный< /а> однако. Это не всегда хорошая идея.
Вы хотите сохранить свою логику внутри представлений и сохранить рендеринг внутри шаблонов.
В вашем случае вы должны сохранить свой счетчик в переменной JavaScript и использовать его в своем фрагменте кода.
Можно использовать встроенный в django тег шаблона widthratio и добавить фильтр:
{{forloop.counter|add:5}}
{{forloop.counter|add:"-5"}}
{% widthratio forloop.counter 5 1 %}
{% widthratio forloop.counter 1 5 %}
Используйте django-mathfilters. Фильтр addition
не приводит числа к целому числу, поэтому вы можете добавлять числа с плавающей запятой:
{% load mathfilters %}
{{ num1 | addition:num2 }}
Я делаю следующее в моем файле шаблона 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)
Для меня этот подход отлично работает
Следуя советам Матье Маркеса, вот что я сделал, используя пользовательский фильтр .
Шаблон отображает 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
.