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

Django中如何在Session添加多商品?解决购物车覆盖问题

在Django Session中实现多商品购物车

你的问题出在当前代码直接用session['nom']和session['prix']存储单个商品信息,每次添加新商品都会覆盖这两个字段。要实现多商品购物车,需要把session改成存储商品列表,具体修改如下:

1. 修改Views.py中的cart_add函数

def cart_add(request, code):
    dico = {"produits": [{'code':'MLO31','nom':'banane sucré','prix':1500}, 
                        {'code':'BRAD5','nom':'pomme de terre','prix':1800}]}
    mes_produits = dico['produits']
    # 从session获取购物车,不存在则初始化为空列表
    cart = request.session.get('cart', [])
    selected_product = next((item for item in mes_produits if item["code"] == code), None)
    
    if selected_product:
        # 检查商品是否已在购物车中(避免重复添加)
        product_exists = next((item for item in cart if item["code"] == code), None)
        if not product_exists:
            cart.append(selected_product)
        # 如果需要支持数量累加,可替换成以下逻辑:
        # if product_exists:
        #     product_exists['quantite'] = product_exists.get('quantite', 1) + 1
        # else:
        #     selected_product['quantite'] = 1
        #     cart.append(selected_product)
        
        # 更新session中的购物车
        request.session['cart'] = cart
    
    # 上下文传递整个购物车
    context = {'cart': cart}
    return render(request, 'cart/cart_detail.html', context)

2. 修改cart_detail.html模板

{% if cart %}
    {% for product in cart %}
        Nom : {{ product.nom }}  
        Prix : {{ product.prix }}<br>
    {% endfor %}
    <!-- 可选:计算购物车总价 -->
    <p>总价:{{ cart|sum:"prix" }}</p>
{% else %}
    <p>购物车为空</p>
{% endif %}

关键改动说明

  • 将session中存储的单个商品字段,改为存储cart列表,每次添加商品时往列表追加(或处理数量累加)
  • 模板不再遍历session的所有键值对,而是直接遍历购物车列表中的每个商品
  • 新增了购物车为空的提示,以及可选的总价计算逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:15:48