django for cycle将变量加在一起

时间:2013-04-18 15:59:40

标签: django templates for-loop addition

我在模板中以简单的循环方式编写问题。这就是我想用伪代码编写的内容。

total = 0;
for each dividend
  total += dividend.amount;
  echo total;
endfor

但我无法找到,如何在django模板文件中编写+ = line。我明白可能我应该在views.py中这样做,但不知怎的,我在模板中这样做。这是我在detail.html中的代码:

{% with totalDividend=0.0 %}
{% for dividend in stock.dividend_set.all %}    
    [ {{ dividend.date|date:"U000" }} , {{ totalDividend|add:dividend.amount }} ],
{% endfor %}
{% endwith %}

但是totalDividend | add:dividend.amount不起作用,有零。如何在模板文件中添加添加这个简单的循环?无论如何,我正在为dividend.ate做周期。

1 个答案:

答案 0 :(得分:0)

您可以编写模板标记来设置上下文值:

from django.template.base import Library
register = Library()

@register.simple_tag(takes_context=True)
def set_by(context, k, v):
    context[k] = v
    return v

{# template #}    
{% with totalDividend=0.0 %}
{% for dividend in stock.dividend_set.all %}    
    [ {{ dividend.date|date:"U000" }} ,
      {% set_by 'totalDividend' totalDividend|add:dividend.amount %} ],
{% endfor %}
{% endwith %}

# OR
@register.assignment_tag(takes_context=True)
def setBy(context, k, v):
    context[k] = v
    return v

{% with totalDividend=0.0 %}
{% for dividend in stock.dividend_set.all %}    
    [ {{ dividend.date|date:"U000" }} ,
      {% set_by 'totalDividend' totalDividend|add:dividend.amount as totalDividend %}{{ totalDividend }} ],
{% endfor %}
{% endwith %}