Django如何根据来源页面实现愿望清单操作后的条件重定向
实现条件重定向的两种方案
方案1:通过HTTP Referer头实现(无需修改前端)
直接读取请求头里的来源页地址,操作完成后直接跳转回该地址即可,适合快速实现:
def save_wish(request, pk): if request.method == 'POST': student = request.user.student # 原有业务逻辑保持不变 # 读取来源页地址,不存在时 fallback 到搜索页 referer = request.META.get('HTTP_REFERER') return redirect(referer) if referer else redirect('students:search')
- 优点:无需调整前端代码,改动量最小
- 缺点:部分浏览器、隐私插件会禁用Referer头,极端场景下会跳转失败
方案2:通过POST参数传递来源页(推荐,可靠性更高)
在两个页面的爱心按钮提交表单中新增隐藏的来源标识参数,后端根据参数判断跳转地址,稳定性100%:
前端修改
搜索页爱心对应的提交表单新增隐藏字段:
<form method="post" action="{% url 'save_wish' pk=你的商品ID %}"> {% csrf_token %} <input type="hidden" name="from" value="search"> <!-- 原有爱心按钮代码不变 --> </form>
愿望清单页爱心对应的提交表单新增隐藏字段:
<form method="post" action="{% url 'save_wish' pk=你的商品ID %}"> {% csrf_token %} <input type="hidden" name="from" value="wishlist"> <!-- 原有爱心按钮代码不变 --> </form>
后端代码修改
def save_wish(request, pk): if request.method == 'POST': student = request.user.student # 原有业务逻辑保持不变 from_page = request.POST.get('from') # 此处替换为你实际的愿望清单页面路由名称 return redirect('students:wishlist') if from_page == 'wishlist' else redirect('students:search')
- 优点:不受浏览器隐私设置影响,跳转逻辑完全可控
- 缺点:需要调整两个前端页面的表单代码
内容的提问来源于stack exchange,提问作者sixovov947
相关产品推荐
相关产品推荐

