[Django]-Django: Redirect to previous page after login

170👍

You do not need to make an extra view for this, the functionality is already built in.

First each page with a login link needs to know the current path, and the easiest way is to add the request context preprosessor to settings.py (the 4 first are default), then the request object will be available in each request:

settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.request",
)

Then add in the template you want the Login link:

base.html:

<a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">Login</a>

This will add a GET argument to the login page that points back to the current page.

The login template can then be as simple as this:

registration/login.html:

{% block content %}
<form method="post" action="">
  {{form.as_p}}
<input type="submit" value="Login">
</form>
{% endblock %}

33👍

To support full urls with param/values you’d need:

?next={{ request.get_full_path|urlencode }}

instead of just:

?next={{ request.path }}
👤arntg

30👍

This may not be a “best practice”, but I’ve successfully used this before:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
👤Grant

14👍

Django’s built-in authentication works the way you want.

Their login pages include a next query string which is the page to return to after login.

Look at http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required

👤S.Lott

1👍

I linked to the login form by passing the current page as a GET parameter and then used ‘next’ to redirect to that page. Thanks!

👤jörg

1👍

I encountered the same problem. This solution allows me to keep using the generic login view:

urlpatterns += patterns('django.views.generic.simple',
    (r'^accounts/profile/$', 'redirect_to', {'url': 'generic_account_url'}),
)
👤moo

1👍

In registration/login.html (nested within templates folder) if you insert the following line, the page will render like Django’s original admin login page:

{% include "admin/login.html" %}

Note: The file should contain above lines only.

-1👍

See django docs for views.login(), you supply a ‘next’ value (as a hidden field) on the input form to redirect to after a successful login.

👤YHVH

-3👍

You can also do this

<input type="hidden" name="text" value="{% url 'dashboard' %}" />
👤JREAM

Leave a comment