0

I was searching the internet for a solution for using two forms in one view, and found this Proper way to handle multiple forms on one page in Django.

But I get local variable 'loginform' referenced before assignment error when trying to post any of the forms.

Trackback

Request Method: POST
Request URL: http://127.0.0.1:8000/

Django Version: 1.8.3
Python Version: 2.7.10
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'main')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/Users/eisamazrouei/Desktop/django/imhere/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/eisamazrouei/Desktop/django/imhere/imhere/main/views.py" in landing_page
  36.   return render(request,'main/landing_page.html',{'loginform':loginform,'registerform':registerform})

Exception Type: UnboundLocalError at /
Exception Value: local variable 'loginform' referenced before assignment

views.py

def landing_page(request):
if request.method == "POST":
    if 'Login' in request.POST:
        loginform = LoginForm(request.POST)
        if loginform.is_valid():
            username = form.cleaned_data['l_username']
            password = form.cleaned_data['l_password']
            user = authenticate(username=username,password=password)
            login(request,user)
            return redirect(reverse('main_page',args=[request.user.username]))
        registerform = RegisterForm()
    elif 'Register' in request.POST :
        registerform = RegisterForm(request.POST)
        if registerform.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            email = form.cleaned_data['email']
            user = User.objects.create_user(username,email,password)
            login(request,user)
            return redirect(reverse('edit_page',args=[request.user.username]))
        loginform = LoginForm()
else :
    loginform = LoginForm()
    registerform=RegisterForm()
return render(request,'main/landing_page.html',{'loginform':loginform,'registerform':register form})

landing_page.html

<div id=login>
    <form action="" method="POST">
    {% csrf_token %}
    {{loginform.as_p}}
    <input type="submit" value="Login"/>
    </form>
</div>


<div id=register>
    <form action="" method="POST">
    {% csrf_token %}
    {{registerform.as_p}}
    <input type="submit" value="Register"/>
    </form>
</div>

please let me know if the method I'm using is wrong.

Thanks

Community
  • 1
  • 1
Eisa.Maz
  • 5
  • 4

1 Answers1

0

You're not sending either Login or Register in your post data, so neither of the conditions will ever be true on post and the variables remain undefined.

You have given your submit buttons values, but not names, so they cannot be included in the post data. Do this:

<input type="submit" name="Login" value="Login"/>
...
<input type="submit" name="Register" value="Register"/>
Daniel Roseman
  • 541,889
  • 55
  • 754
  • 786