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

Django视图如何实现重定向回当前页面?删除购物车出现循环请求如何解决

问题原因

你出现循环请求的核心原因是request.path_info指向的就是当前cart_remove_retail删除视图对应的路由地址,删除逻辑执行完后再次跳转回删除路由,会反复触发「执行删除→跳转删除路由」的逻辑,自然就形成了死循环。

解决方案

方案1:后端直接重定向回操作前的页面(适合普通表单提交的删除请求)

从请求头的HTTP_REFERER字段获取用户触发删除操作前所在的页面地址,以此作为重定向目标,同时加兜底路由避免获取不到来源页时报错:

from django.shortcuts import redirect

def cart_remove_retail(request, slug):
    cart = Cart(request)
    product = get_object_or_404(Product, slug=slug)
    cart.remove(product)
    # 第二个参数替换为你项目中购物车页/商品列表页对应的路由名称作为兜底
    return redirect(request.META.get('HTTP_REFERER', 'cart_list'))

方案2:前端控制刷新(适合弹窗触发的AJAX异步删除请求)

如果你的删除操作是弹窗发起的异步请求,不需要后端做重定向,后端直接返回操作状态,前端收到成功响应后刷新当前页即可,交互体验更流畅:
后端代码调整为:

from django.http import JsonResponse

def cart_remove_retail(request, slug):
    cart = Cart(request)
    product = get_object_or_404(Product, slug=slug)
    cart.remove(product)
    return JsonResponse({'code': 0, 'msg': '删除成功'})

前端收到成功响应后执行window.location.reload()即可刷新当前页面。

注意事项

  • 少数浏览器、安全插件会主动屏蔽HTTP_REFERER请求头,所以一定要设置兜底跳转路由,避免请求报错。
  • 涉及购物车修改的操作建议做好权限校验,避免非用户本人操作修改购物车内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:08