2013-04-18 1 views
1

У меня возникла проблема с записью в простой для цикла шаблона. Это то, что я пытаюсь написать в псевдокоде.django for cycle добавить переменные вместе

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

Но я не могу узнать, как написать + = строку в файле шаблона django. Я понимаю, что, вероятно, я должен делать это в 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 | добавить: dividend.amount не работает, есть нули. Как написать этот простой для цикла с добавлением в файл шаблона? В любом случае, я делаю для цикла для divend.date.

ответ

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 %} 
+0

Спасибо за ответ, я буду проверить его в течение часа. Я читал о тегах, но, хотя, что-то такое тривиальное может быть сделано непосредственно в файле шаблона. Я действительно потрясен, это не так. Еще раз спасибо. – Lucas03

+0

Я пробовал и вашу версию, но она не работает. Это мой файл detail.html [link] (http://pastebin.com/xUQ7aTXy), и вот мой вывод. [link] (http://46.28.109.22:8800/stocks/B/). Цена (оранжевая линия), где я хочу добавить сумму. Он равен нулю (источник js). – Lucas03

+1

Хм, он работает, он просто не работает с поплавковыми номерами. http://stackoverflow.com/questions/2237607/add-float-number-in-template-django – Lucas03