Django项目中GET访问/cart/add/1/提示Method Not Allowed问题求助
问题根源
你的cart_add视图通过@require_POST装饰器强制要求仅接受POST请求,但前端页面里的添加按钮用了<a>标签的href直接跳转——这会发送GET请求,完全不符合视图的访问规则,所以服务器返回"Method Not Allowed (GET)"错误。
修复方案
修改前端的提交逻辑,让按钮真正触发表单的POST提交,而不是直接跳转:
修改shop/detail.html代码
方案1:用button替换a标签(推荐)
把原来的<a>标签换成<button>,直接作为表单的提交按钮:
<form action="{% url 'cart:cart_add' product.id %}" method="post"> {% csrf_token %} {{ cart_product_form.as_p }} {{ cart_product_form.non_field_errors }} <div class="Card-hover"> <button class="Card-btn" type="submit"> <img src="{% static 'img/icons/card/cart.svg' %}" alt="cart.svg"/> </button> </div> </form>
方案2:保留a标签,用JS触发表单提交
如果一定要保留<a>标签的样式,给它添加点击事件来提交表单:
<form id="add-cart-form" action="{% url 'cart:cart_add' product.id %}" method="post"> {% csrf_token %} {{ cart_product_form.as_p }} {{ cart_product_form.non_field_errors }} <div class="Card-hover"> <a class="Card-btn" href="javascript:void(0)" onclick="document.getElementById('add-cart-form').submit()"> <img src="{% static 'img/icons/card/cart.svg' %}" alt="cart.svg"/> </a> </div> </form>
额外验证点
- 确认
CartAddProductForm的字段正常渲染,保证表单数据能通过POST传递到视图 - 修改后点击按钮,会发送POST请求到
/cart/add/1/,符合视图的权限要求,就能正常添加商品到购物车了
内容的提问来源于stack exchange,提问作者Reis
相关产品推荐
相关产品推荐

