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
}


Вернуться на верх