0

我正在尝试使用 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)
4

0 回答 0