模板未显示正确的计算值

时间:2012-01-12 20:06:15

标签: python html django django-templates django-views

我正在尝试显示每个用户在我的模板上的表格中获得的总金额。现在,当我在控制台中打印语句时,我得到了正确的值,但是当我将{{ total_dollar_amount }}放在我的模板上时,它只显示最后一个值。

现在我认为我应该遍历total_dollar_amount但是它会抛出一个错误,说十进制值不可迭代。

任何人都知道我错过了什么?

views.py

def ABD_report(request, *args, **kwargs):
"""
This report will show all 'In Trust For' investments in the system and display all relevant information
"""
from investments.models import Investment
from reports.forms import InTrustForm
context = {}
if request.POST:
    form = InTrustForm(request.agents, request.POST)
    if form.is_valid():
        agents = form.cleaned_data['agents']
        context['selected_agents'] = agents
        investments = Investment.objects.filter(plan__profile__agent__in=agents, plan__ownership_type__code = "itf")
        for i in investments:
            #count all members in each plan
            count = i.plan.planmember_set.all().count()
            #take off the primary member of the account
            count -= 1
            if i.interestoption:
                if i.interestoption.short_label == 'AN':
                    pay_amt = i.pay_amount
                    total_amt = (pay_amt / count)
                    context['total_dollar_amt'] = total_amt
            context['counted'] = count
        context['investments'] = investments
        context['show_report'] = True
else:
    form = InTrustForm(request.agents)

context['form'] = form

return render_to_response('reports/admin/abd_report.html', RequestContext(request, context))

2 个答案:

答案 0 :(得分:1)

每次在循环中命中赋值时,

context['total_dollar_amt']都会被覆盖。要查看将传递给模板的值,请在print context['total_dollar_amt']之前执行render_to_response

我从你的描述中并不完全清楚,但我认为你需要将一个dicts列表传递给上下文 - 比如context['investments_data'] = [],然后是循环,context['investments_data'].append({'inv': i, 'total_dollar_amt': total_amt})或类似的。然后在模板中:

{% for inv_data in investments_data %}
    {{ inv_data.inv.name }} total: {{ inv_data.total_amt }}
{% endfor %}

答案 1 :(得分:1)

context变量是字典;每个键只能有一个值。您正在遍历investments并在每个循环上设置相同的两个键context['total_dollar_amt']context['counted'] - 所以在每次迭代时都会覆盖之前的值。

如果您希望能够遍历每项投资的countedtotal_dollar_amt值,则需要将其附加到投资对象,而不是在context中设置密钥:

for i in investments:
    #count all members in each plan
    count = i.plan.planmember_set.all().count()
    #take off the primary member of the account
    count -= 1
    if i.interestoption:
        if i.interestoption.short_label == 'AN':
            pay_amt = i.pay_amount
            total_amt = (pay_amt / count)
            # attach value to the investment
            i.total_dollar_amt = total_amt
    # attach value to the investment
    i.counted = count

现在,您可以在模板中循环浏览investments