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 %}
问题原因
for循环内部每次都重新创建context字典,将mylist赋值为单个字符串,最终传递给模板的mylist仅保留最后一次循环的结果。- 模板遍历字符串时,会逐个输出字符串的每个字符,而非完整的一行还款数据。
修复方案
修复后的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
相关产品推荐
相关产品推荐

