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
相关产品推荐
相关产品推荐

