Django for-loop для расчета возврата кредита и процентов за период, отображающий только последнюю итерацию
Я создаю кредитную систему для расчета периода погашения. У меня такая проблема, когда я запускаю код, он отображает только последнюю строку. Ниже приведен мой view.py Пожалуйста, мне нужно, чтобы он отображал все строки, а не только последнюю строку
def sveloan(request):
if 'userid' in request.session:
if request.method == 'POST':
balance = 120000
annual_interest_rate = 42
monthly_payment_rate =0.3
monthly_interest_rate = annual_interest_rate / 12
monthly_payment = monthly_payment_rate * balance
new_balance= (balance - monthly_payment) * (1 + monthly_interest_rate)
for month in range(1, 6):
monthly_payment = 20000
balance = (balance - monthly_payment)
rateint = (balance / 100 * monthly_interest_rate)
mydist = ('Month: %d \n Minimum monthly payment: %g \n Remaining balance: %g \n Minimum Interest payment: %g'\
% (month, round(monthly_payment, 2), round(balance,2), round(rateint, 2)))
context={
'mylist': mydist
}
return render(request,'loantest.html',context)
else:
return render(request,'index.html')
else:
return render(request,'index.html')
В моем шаблоне:
{% for p in mylist %}
{{p}}
{% endfor %}
Я думаю, что у вас просто есть пара небольших вещей, которые нужно подправить. Вот моя быстрая попытка исправить этот код. Я добавил поясняющие комментарии в строку:
def sveloan(request):
if 'userid' in request.session:
if request.method == 'POST':
balance = 120000
annual_interest_rate = 42
monthly_payment_rate = 0.3
monthly_interest_rate = annual_interest_rate / 12
monthly_payment = monthly_payment_rate * balance
new_balance = (balance - monthly_payment) * (1 + monthly_interest_rate)
# setting up a collector here for the individual mydist tuples/rows
mylist = []
for month in range(1, 6):
monthly_payment = 20000
balance = (balance - monthly_payment)
rateint = (balance / 100 * monthly_interest_rate)
mydist = (
'Month: %d \n Minimum monthly payment: %g \n Remaining balance: %g \n Minimum Interest payment: %g' \
% (month, round(monthly_payment, 2), round(balance, 2), round(rateint, 2)))
# add each mydist tuple to the mylist collector
mylist.append(mydist)
# de-indenting this, it should not be within your for loop
context = {
# use the mylist value, which now has all of the rows
'mylist': mylist
}
return render(request, 'loantest.html', context)
else:
return render(request, 'index.html')
else:
return render(request, 'index.html')
Ваш цикл for перезаписывает mylist
каждую итерацию цикла for и поэтому фиксирует только последнюю итерацию.
Чтобы решить эту проблему, можно добавить переменную mydist
в список python, объявленный вне цикла, и добавлять в него каждую итерацию. Затем передать этот список в контекст после завершения цикла. Например:
mylist = []
for month in range(1, 6):
# whatever code
mydist = 'whatever value'
mylist.append(mydist)
context = {
'mylist': mydist
}