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]))
顺带修正代码里的其他小问题
- 字段赋值错误:你当前把表单的
usecase_name赋值给了usecase_details.user_name,usecase_description赋值给了usecase_details.user_email,逻辑明显不符,应该对应模型的正确字段:
usecase_details.usecase_name = usecase_name usecase_details.usecase_description = usecase_description
- 冗余判断:
if usecase_details:完全没必要,Usecase.objects.get(...)成功获取对象后必然非空,save()后也不会变为None,直接删除即可。 - 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
相关产品推荐
相关产品推荐

