2013-04-18 26 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不起作用,還有零。如何在模板文件中添加這個簡單循環?無論如何,我正在爲dividend.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文件[鏈接](http://pastebin.com/xUQ7aTXy),這裏是我的輸出。 [鏈接](http://46.28.109.22:8800/stocks/B/)。價格(橙色線)是我想添加金額的地方。它是零(js源)。 – Lucas03

+1

嗯,它的工作原理,它只是不適用於浮點數。 http://stackoverflow.com/questions/2237607/add-float-number-in-template-django – Lucas03