我正在尝试使用 Django 消息系统将用户发送回他们的上一页。我有一个可以从多个位置访问的删除客户 FBV,在删除客户后,我想将用户发送回他们所在的位置。如果我这样做,效果很好,我会得到我期望的行为:
@login_required
def delete_customer(request, custpk):
del_cust = Customer.objects.get(pk=custpk)
returnURL = ''
if request.method == "POST":
storage = get_messages(request)
for message in storage:
returnURL = message.message
storage.used = True
del_cust.delete()
return redirect(returnURL)
context = {
'del_cust': del_cust
}
return render(request, 'delete_customer.html', context)
但是,我希望能够在 If “POST” 部分和上下文变量中使用该 returnURL 变量来发送到渲染语句。为什么当我这样做时它不起作用?
@login_required
def delete_customer(request, custpk):
del_cust = Customer.objects.get(pk=custpk)
returnURL = ''
storage = get_messages(request)
for message in storage:
returnURL = message.message
storage.used = True
if request.method == "POST":
del_cust.delete()
return redirect(returnURL)
context = {
'del_cust': del_cust,
'returnURL': returnURL
}
return render(request, 'delete_customer.html', context)
为什么这不起作用?当重定向命中时,它说没有什么可以重定向到的。如何在函数顶部设置 returnURL 变量并在 If "POST" 部分和上下文变量中使用它?
编辑:我同意,在循环中分配变量是不好的。考虑下面的例子。为什么在 If..."POST" 语句中可以使用 del_cust 变量,但不能使用 urlList 变量?第一个 print(urlList) 向我显示了我的列表,其中包含一个项目(我的一条消息的文本)。If..."POST" 语句中的第二个 print(urlList) 向我显示了一个空列表。为什么?
@login_required
def delete_customer(request, custpk):
del_cust = Customer.objects.get(pk=custpk)
urlList = []
storage = get_messages(request)
for message in storage:
urlList.append(message.message)
storage.used = True
print(urlList)
if request.method == "POST":
print(urlList)
del_cust.delete()
return redirect('/')
context = {
'del_cust': del_cust
}
return render(request, 'delete_customer.html', context)