我正在尝试显示每个用户在我的模板上的表格中获得的总金额。现在,当我在控制台中打印语句时,我得到了正确的值,但是当我将{{ 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))
答案 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']
- 所以在每次迭代时都会覆盖之前的值。
如果您希望能够遍历每项投资的counted
和total_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
。