Take the 2-minute tour ×

i have successfully set the app to send me to url like


i have defined the context processors as following



but when i login it redirects me instead to the home page, i printed the request in my login view and i got the GET is empty query set which is strande, any ideas why !?

i also tried adding

<input type="hidden" name="next" value="{{next}}" />

to the login.html, but this added the next to the POST request as an empty parameter

Edit 1 The login view, and i try to print the 'next' parameter and it returns null, because the the GET is an empty queryset

def log_in(request):
    This method checks for the input username(email) and password.
    If they are empty the user id redirected to the login page, else checks whether
    the user is authenticated. If the user is not found in the database, it renders the login
    page with an error_message that the email or password are invalid. Further, it checks if the user's
    account is activated, it not he is redirected back to login and notified.
    If the user is activated, it checks for the field remember_me, if it is not checked, then the
    expiry date of the session is set to when the browser is closed.
    Then the user is logged in using the login in django backends and it checks on the session
    value if it is his first time or not to open the getstrated instead of the normal profile.
    print request.GET['next']
    if request.POST.has_key('username') and request.POST.has_key('password'):
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is None:
            error_message = "The Email/Password is incorrect."
            return render(request, 'userprofiles/registration.html', {'error_message': error_message})
            if user.is_active:
                if not request.POST.get('remember_me', False):

                login(request, user)

                request.session['DEPLOYED_ADDRESS'] = settings.DEPLOYED_ADDRESS

                first_week = False
                logged_user = UserProfile.objects.get(username=request.user.username)
                if (((request.user.last_login - request.user.date_joined).days) < 8) and (logged_user.got_started == False):
                    first_week = True

                if first_week:
                    return redirect('/getting_started/', RequestContext(request))
                    return redirect('/', RequestContext(request))

                error_message = "This Email Hasn't Been Activated Yet. Please Check The Activation Mail Sent To You."
        RegistrationForm = get_form_class(up_settings.REGISTRATION_FORM)

        if request.method == 'POST':
            form = RegistrationForm(data=request.POST, files=request.FILES)

            if form.is_valid():
                new_user = form.save()
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']

                request.session['login'] = "first"

                # Automatically log this user in
                if up_settings.AUTO_LOGIN:

                    if up_settings.EMAIL_ONLY:
                        username = form.cleaned_data['email']

                    user = authenticate(username=username, password=password)
                    if user is not None:
                        if user.is_active:
                            login(request, user)

                return redirect(up_settings.REGISTRATION_REDIRECT)

            form = RegistrationForm()

        return render(request, 'userprofiles/registration.html', {'form': form,'base_login': base_login})
share|improve this question
I would recommend using the built in login view instead of trying to write your own. If you do use your own login view, how can we help you debug it when you don't show it here? –  Alasdair Jan 8 '13 at 12:28
@Alasdair i have extra scenarios more than the oridnary login, and i have added the login view,check the edit, Thanks in advance –  Fady Kamal Jan 8 '13 at 12:36
@FadyKamal Can you try request.REQUEST['next']? I'm curious to see if that works. –  bvukelic Jan 8 '13 at 14:07
@bvukelic actually i printed request ,and i didn't find any thing that indicates the existence of next anywhere, i tried request.REQUEST['next'] and request.GET.get('next','') i just get nothing –  Fady Kamal Jan 8 '13 at 14:54
add comment

1 Answer

up vote 1 down vote accepted

When you want to render the form, the browser makes a GET request to your Django app (this has nothing to do with request.GET and request.POST, which merely contain data sent as URL parameters or form-encoded data respectively, and are always available). Since you are using the next URL parameter during the GET request, you will have access to it then. However, you then proceed to render the form page as a response to the request without including next anywhere, so browser no longer has access to this value, nor does your app.

When the browser then proceeds to submit the form, it does so by performing a POST request. It so happens that you are using the same handler to handle this request, but it is still a separate request, and therefore, next, which you are not passing through the form or URL parameter, is lost.

You can fix this in the original GET request (before showing the form to the user). As soon as you receive the next URL parameter, you can do one of the following:

Put it in the login form by passing the value to the template via context, and rendering a hidden field within the form:

<!-- inside your FORM element -->

Putting next in session during GET request:

request.session['next'] = request.GET.get('next', '/')

There are more methods (e.g., adding hidden field in the login form class), but the above two are most straightforward.

share|improve this answer
i am sorry i don't get the part how to send the next parameter into the form, all i have is the url and i can't retrive it from it. –  Fady Kamal Jan 8 '13 at 15:05
Are you saying that you cannot retrieve a parameter in a GET request? –  bvukelic Jan 8 '13 at 15:50
no,the next parameter dosen't exist in the GET request. when i tried printing the GET request it gave me an empty queryset –  Fady Kamal Jan 8 '13 at 17:05
@FadyKamal: Sorry if I sound patronizing and all that, but, does that happen before or after you submit the form? Or both? –  bvukelic Jan 8 '13 at 17:11
this is after submitting the html form and going to the login view i.e press login in the html –  Fady Kamal Jan 8 '13 at 18:05
show 3 more comments

Your Answer


