"локальная переменная '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
, то оно отменит создание пустой формы.