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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:17:50