Как добавить, умножить числовые переменные в шаблоне Django?

фрагмент JS, который я создал, полагается на forloop.переменная счетчика доступна в пределах {% for key, value in data.items %}..{% endfor %} тег.

есть ли способ использовать математические операторы ( * , -,+,/) вместе с forloop.counter переменной?

5 ответов


есть фильтр добавить добавить из документации.

Я уверен, что нет встроенного способа использовать другие математические операции над числами в шаблонах Django. Вы всегда можете сделать свой собственный однако. Это не всегда хорошая идея.

вы хотите сохранить свою логику внутри представлений и сохранить рендеринг внутри шаблонов.

в вашем случае, вы должны хранить ваши счетчик в переменной JavaScript и используйте его в своем фрагменте.


можно использовать встроенный django widthratio шаблон тега и добавить:

  • добавить 5 до дляпеременная элемента.счетчик {{forloop.counter|add:5}}
  • вычесть 5 из дляпеременная элемента.счетчик {{forloop.counter|add:"-5"}}
  • разделить дляпеременная элемента.счетчик 5 {% widthratio forloop.counter 5 1 %}
  • умножить дляпеременная элемента.счетчик 5 {% widthratio forloop.counter 1 5 %}

использовать Джанго-mathfilters. The addition фильтр не принуждает числа к целому числу, поэтому вы можете добавлять поплавки:

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

после советов Матье Маркеса, вот что я сделал, используя настраиваемый фильтр.

шаблон представляет 5 записей на страницу после использования фрагмента разбиения на страницы. На странице презентации сбросить дляпеременная элемента.счетчик. Чтобы создать непрерывный счетчик на странице..

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.


Я делаю следующий в моем файле шаблона тележки.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