Как добавить, умножить числовые переменные в шаблоне 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)
для меня этот подход работает отлично