[Django]-Redirect / return to same (previous) page in Django?

139๐Ÿ‘

One of the way is using HTTP_REFERER header like as below:

from django.http import HttpResponseRedirect

def someview(request):
   ...
   return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

Not sure of cons of this!

๐Ÿ‘คRohan

23๐Ÿ‘

100% working Example

For Class Based View and Function:

from django.http import HttpResponseRedirect
    ...
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

or

from django.http import HttpResponseRedirect
    ...
    return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))

Example โ€“

class TaskNotificationReadAllView(generic.View):

    def get(self, request, *args, **kwargs):
        TaskNotification.objects.filter(assigned_to=request.user).update(read=True)   
        print(request.META.get('HTTP_REFERER'))    
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
๐Ÿ‘คCipher

21๐Ÿ‘

While the question and answer is old, I think itโ€™s lacking a few options. I have not find any cons with the methods, I would be happy to know if there are any?

๐Ÿ‘คDaniel Backman

4๐Ÿ‘

In django view suppose you are not logged in but click on some content that content trigger some url like /board/2/new_topic then @login_required will redirect you to login page with this url

http://localhost:8000/signin/?next=/boards/2/new_topic/

so our aim is redirect to http://localhost:8000/boards/2/new_topic/ page after successful login so one line we will have to add

  if 'next' in request.GET:
        return redirect(request.GET['next'])

then if it next is there then it will redirect according to that other normal redirect .

Views.py :

def signin(request):
if request.method == "POST":
    user_login_form = UserLoginForm(request.POST)
    email = request.POST['email']
    password = request.POST['password']
    user = authenticate(request, email=email, password=password)
    if user and user.is_active:
        login(request, user)
        if 'next' in request.GET:
            return redirect(request.GET['next'])
        else:
            return redirect('home')
    else:
        return render(request, 'signin.html', context={'form': user_login_form})
else:
    user_login_form = UserLoginForm()
    return render(request, 'signin.html', context={'form': user_login_form})
๐Ÿ‘คabhishek Singh

Leave a comment