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

Django开发电商网站时如何识别多商品对应的被点击加入购物车按钮

你这个需求有两种实现路径,不一定非要用JavaScript,新手可以先从更简单的纯Django模板方案入门:

方案1:无需JavaScript(纯Django表单实现,页面会刷新)

原理是给每个商品单独配一个提交表单,点击按钮时自动把对应商品ID提交给后端,不需要写任何前端脚本:
修改你的模板代码如下:

<div class="row">
    {% for product in products %}
        <div class="col-lg-4">
        <img alt="" class="thumbnail" src="{{ product.images.all.0.image.url }}">
            <div class="box-element product">
                <h5><strong>{{ product.name }}</strong></h5>
                <hr>
                <!-- 新增每个商品对应的表单 -->
                <form action="{% url 'add_to_cart' %}" method="post" style="display: inline;">
                    {% csrf_token %}
                    <input type="hidden" name="product_id" value="{{ product.id }}">
                    <button type="submit" class="btn btn-outline-secondary add-btn"> Add to cart</button>
                </form>
                <a class="btn btn-outline-success" href="{% url 'detail' product.id %}"> View</a>
                <h4 style=" float: right"><strong>{{ product.price }}</strong></h4>
            </div>
        </div>
    {% endfor %}
</div>

后端对应新增add_to_cart视图,接收product_id参数后完成购物车逻辑即可,表单提交完成后可以重定向回商品列表页。

方案2:使用JavaScript实现(无刷新体验更好)

如果想要点击按钮后不刷新页面,就需要用JS监听点击事件,发送AJAX请求给后端:

第一步:修改模板按钮,添加自定义属性存储商品ID

<!-- 按钮部分修改为 -->
<button class="btn btn-outline-secondary add-btn" data-product-id="{{ product.id }}"> Add to cart</button>

第二步:在模板底部添加JS监听逻辑

// 用jQuery实现示例,也可以替换为原生JS写法
$('.add-btn').click(function() {
    const productId = $(this).data('product-id');
    $.post({
        url: "{% url 'add_to_cart' %}",
        data: {
            'product_id': productId,
            'csrfmiddlewaretoken': '{{ csrf_token }}'
        },
        success: function(res) {
            // 成功后自定义逻辑,比如更新购物车角标数量
            alert('商品已加入购物车');
        }
    })
})

第三步:后端视图适配AJAX请求

返回JSON格式的响应即可,不需要做页面重定向。

内容的提问来源于stack exchange,提问作者Menna T-Allah Magdy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:57:02