"локальная переменная 'form_b' ссылается перед присвоением django"


def register(request):
    if not request.user.is_authenticated:
        if request.POST.get('submit') == 'sign_up':
            form = RegisterForm(request.POST)
            if form.is_valid():
                form.save()
            form = RegisterForm()
        elif request.POST.get('submit') == 'log_in':
            form1 = LogInForm(request=request, data=request.POST)
            if form1.is_valid():
                uname = form1.cleaned_data['username']
                upass = form1.cleaned_data['password']
                user = authenticate(username=uname, password=upass)
                if user is not None:
                    login(request, user)
                    return redirect('/')
        else:
            form_b = LogInForm()
            form = RegisterForm()
        return render(request, 'auth.html', {'form': form, 'form1': form_b})

Выше приведена моя функция просмотра

<form class="loginForm" action="" method="POST" novalidate>
    {% csrf_token %} 
    {% for field in form %}
       <p> {{field.label_tag}}  {{field}} </p>
    {% endfor %}
    <button type="submit" class="btnLogin" name='submit' value='sign_up'>Sing Up</button>
 </form>
 <form class="loginForm" action="" method="post" novalidate>
    {% csrf_token %}
    {% for field in form1 %}
       <p> {{field.label_tag}}  {{field}} </p>
    {% endfor %}
 <button  class="btnLogin" type="submit"  name='submit' value='log_in'>Log In </button>
 </form>

при отображении двух форм в функции view код работает нормально, но когда я нажимаю на signup возникает ошибка "local variable 'form_b' referenced before assignment django"

Вам нужно присваивать эту переменную во всех возможных ситуациях, если вы используете ее в конце ИЛИ просто добавить эксклюзивный возврат для той части, где она существует. В вашей конкретной ситуации я предлагаю изменить form_b на form1 и переместить их перед if not request.user.is_authenticated условием:

def register(request):
    if not request.user.is_authenticated:
        form1 = LogInForm()
        form = RegisterForm()
        if request.POST.get('submit') == 'sign_up':
            ...
        elif request.POST.get('submit') == 'log_in':
            ...
        return render(request, 'auth.html', {'form': form, 'form1': form1})

Таким образом, вы убедитесь, что оба условия существуют. Если другое условие будет True, то оно отменит создание пустой формы.

Вернуться на верх