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

Django:如何在HttpResponseRedirect中传递用例ID实现更新后重定向

解决Django编辑用例后重定向到对应详情页的问题

你当前代码的核心问题是:重定向时直接写死了字符串'/usecase-details/usecase_details.usecase_id',没有将这段文本替换为实际的用例ID值。以下是两种可行的修正方法:

方法1:直接拼接ID到路径(简单直接)

视图中已经拿到了ucid参数(或者更新后的usecase_details对象),直接把ID拼进重定向路径即可:

修改views.py里的重定向代码:

# 成功更新后的重定向
return HttpResponseRedirect(f'/usecase-details/{ucid}')
# 也可以用更新后的对象ID
# return HttpResponseRedirect(f'/usecase-details/{usecase_details.usecase_id}')

# 错误分支的重定向同理,注意修正你原来的拼写错误(uecase_details → 正确变量名)
return HttpResponseRedirect(f'/usecase-details/{ucid}')

方法2:使用Django的reverse函数(推荐,更健壮)

这种方法不需要硬编码URL路径,而是通过URL的name属性生成路径,后续如果URL规则修改,视图代码无需改动。

步骤1:给详情页的URL配置添加name参数:

# 假设你的详情页URL配置如下,添加name='usecase_details'
path('usecase-details/<str:ucid>', av.usecase_details, name='usecase_details')

步骤2:在views.py中导入reverse并修改重定向代码:

from django.urls import reverse

# 成功重定向
return HttpResponseRedirect(reverse('usecase_details', args=[ucid]))

# 错误分支的重定向
return HttpResponseRedirect(reverse('usecase_details', args=[ucid]))

顺带修正代码里的其他小问题

  1. 字段赋值错误:你当前把表单的usecase_name赋值给了usecase_details.user_name,usecase_description赋值给了usecase_details.user_email,逻辑明显不符,应该对应模型的正确字段:
usecase_details.usecase_name = usecase_name
usecase_details.usecase_description = usecase_description
  1. 冗余判断:if usecase_details:完全没必要,Usecase.objects.get(...)成功获取对象后必然非空,save()后也不会变为None,直接删除即可。
  2. QuerySet优化:初始的usecase_details = Usecase.objects.filter(usecase_id=ucid)可改为usecase_details = Usecase.objects.get(usecase_id=ucid),直接获取单个对象,无需取[0],且对象不存在时会抛出异常,正好被外层except捕获。

修改后的views.py示例:

from django.urls import reverse

def edit_usecase(request, ucid):
    try:
        usecase_details = Usecase.objects.get(usecase_id=ucid)
        if request.method == "POST":
            usecase_name = request.POST['usecase_name']
            usecase_description = request.POST['usecase_description']
            usecase_details.usecase_name = usecase_name
            usecase_details.usecase_description = usecase_description
            usecase_details.save()
            messages.success(request, "Usecase Data was updated successfully!")
            return HttpResponseRedirect(reverse('usecase_details', args=[ucid]))
        return render(request, 'UpdateUsecase.html', {'usecase_details': usecase_details})
    except:
        messages.error(request, "Some Error was occurred!")
        return HttpResponseRedirect(reverse('usecase_details', args=[ucid]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:28:13