在Django模板中遍历自定义字典访问键值对无结果,如何解决?
解决Django模板遍历CartList无结果的问题
看起来你遇到的核心问题是传递给模板的CartList是单个字典,而非列表,导致模板里的for循环没有按预期遍历商品条目。咱们一步步拆解解决:
问题根源
你从Ajax获取的是单个商品字典:
{'Name': 'Dawn Bread Milky', 'Pricse': 60, 'Barcode': 11111, 'Quantity': 2, 'Total_pricse': 120}
但在构建genrate_bill时,你把CartList设为cart[0]——这意味着CartList是这个单个字典,而不是包含多个字典的列表。Django模板里的{% for item in CartList %}遍历字典时,默认会遍历字典的键名(比如Name、Pricse),而不是你期望的整个商品对象,所以自然渲染不出任何有效内容。
解决方案
根据你的业务场景,选下面其中一种方案:
方案1:把单个商品包装成列表(推荐,兼容多商品场景)
如果你希望后续支持多商品订单,直接在后端把单个字典包装成列表传递:
genrate_bill = { "Order_ID": Bill_Genrated.id, 'Khaata': is_Khaata, 'CustomerName': is_Khaata.name, 'Bill': Bill_Genrated, 'CartList': [cart[0]], # 把单个字典放进列表里 'SubTotal': total_amount, 'Discount': 0, 'TotalPricse': total_amount }
这样模板里的{% for item in CartList %}就能正常遍历列表中的每个商品字典,你原来的模板代码就能正常显示内容了。
方案2:直接访问单个字典的键(适用于确定只有一个商品的场景)
如果你的业务逻辑里当前订单只会有一个商品,那可以去掉for循环,直接在模板里访问字典的键:
<tr> <td>{{ CartList.Name }}</td> <td class="text-center">Rs.{{ CartList.Pricse }}</td> <td class="text-center">{{ CartList.Quantity }}</td> <td class="text-right">Rs.{{ CartList.Total_pricse }}</td> </tr>
额外注意:检查拼写错误
顺便提一句,你的字典键里有拼写错误:Pricse应该是Price,Total_pricse应该是Total_price。如果后续后端修正了键名,模板里也要同步修改,否则会出现取不到值的情况。
内容的提问来源于stack exchange,提问作者Waqas Devolper
相关产品推荐
相关产品推荐

