You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django贷款还款计算循环仅显示最后迭代结果的修复请求

问题:贷款系统仅显示最后一行迭代结果

构建贷款系统用于计算还款周期时,运行代码仅能显示最后一行迭代结果,无法展示所有月份的还款数据。以下是原代码:

原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 %}

问题原因

  1. for循环内部每次都重新创建context字典,将mylist赋值为单个字符串,最终传递给模板的mylist仅保留最后一次循环的结果。
  2. 模板遍历字符串时,会逐个输出字符串的每个字符,而非完整的一行还款数据。

修复方案

修复后的view.py代码

将mylist初始化为空列表,循环中逐个添加每月还款数据,循环结束后再将列表存入context:

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)

              # 初始化空列表存储所有月份数据
              mylist = []
              for month in range(1, 6):
                  monthly_payment = 20000
                  balance = balance - monthly_payment
                  rateint = (balance / 100 * monthly_interest_rate)
                  # 生成当月数据字符串并添加到列表
                  monthly_data = (
                      f'Month: {month} \n'
                      f'Minimum monthly payment: {round(monthly_payment, 2)} \n'
                      f'Remaining balance: {round(balance, 2)} \n'
                      f'Minimum Interest payment: {round(rateint, 2)}'
                  )
                  mylist.append(monthly_data)
              
              # 循环结束后构建context
              context = {'mylist': mylist}
              return render(request,'loantest.html',context)
        else:
            return render(request,'index.html')
    else:
        return render(request,'index.html')

修复后的模板代码

遍历列表中的每个元素,使用Django过滤器处理换行,确保每行数据完整展示:

{% for item in mylist %}
    {{ item|linebreaks }}
{% endfor %}

内容的提问来源于stack exchange,提问作者akin ayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:32:22