Django переменная сообщения недоступна в операторе If .. - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь использовать систему сообщений 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)

Однако я хочу иметь возможность использовать эту переменную returnURL как в разделе If "POST", так и в переменной context для отправить в оператор рендеринга. Почему, когда я это делаю, это не работает?

@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" и в переменной контекста?

РЕДАКТИРОВАТЬ: я согласен, назначение переменной в al oop плохой. Рассмотрим пример ниже. Почему переменная del_cust доступна в операторе If ... "POST", а переменная urlList - нет? Первый отпечаток (urlList) показывает мне мой список с одним элементом (текст моего одного сообщения). Второй вывод (urlList) внутри оператора If ... "POST" показывает пустой список. Почему?

@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)
...