【问题标题】:How to add, multiply number variables in a Django template?如何在 Django 模板中添加、乘以数字变量?
【发布时间】:2013-08-22 07:12:02
【问题描述】:

我创建的 JS sn-p 依赖于 {% for key, value in data.items %}..{% endfor %} 标记中可用的 forloop.counter 变量。

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

【问题讨论】:

    标签: for-loop tags django-templates


    【解决方案1】:

    可以使用django内置的widthratio模板标签和add过滤器:

    • 将 5 添加到 forloop.counter {{forloop.counter|add:5}}
    • 从 forloop.counter {{forloop.counter|add:"-5"}} 中减去 5
    • 将forloop.counter除以5 {% widthratio forloop.counter 5 1 %}
    • 将 forloop.counter 乘以 5 {% widthratio forloop.counter 1 5 %}

    【讨论】:

    • 显然,它会四舍五入浮点数,是吗?
    【解决方案2】:

    文档中有过滤器add

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

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

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

    【讨论】:

    • 链接不再工作。 Here最新版本。
    • 添加过滤器的一个渲染应用程序是将 1 添加到从零开始的数字(我的示例是 Excel 电子表格中的行号)以供人类使用。我想这两种方式都可以争论,但我在模板中这样做而不是我的 Excel 文件解析代码或添加到视图中很方便。
    【解决方案3】:

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

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

    【讨论】:

    • 我最喜欢这个第 3 方解决方案。更灵活,与 JavaScript 一起使用时,我经常使用浮点数。
    【解决方案4】:

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

      在 Mathieu Marques 提示之后,这是我使用 custom filter 所做的。

      使用分页 sn-p 后,模板每页呈现 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 的文件名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2019-06-08
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        相关资源
        最近更新 更多