Django and urls.py: How do I HttpResponseRedirect via a named url?

30,339

Solution 1

You need to use the reverse() utils function.

from django.urls import reverse
# or Django < 2.0 : from django.core.urlresolvers import reverse

def myview(request):
    return HttpResponseRedirect(reverse('arch-summary', args=[1945]))

Where args satisfies all the arguments in your url's regular expression. You can also supply named args by passing a dictionary.

Solution 2

The right answer from Django 1.3 onwards, where the redirect method implicitly does a reverse call, is:

from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')

Solution 3

A more concise way to write that if statement would be if request.session.get('user'). has_key is deprecated nowadays, and .get() returns None (by default, changeable by passing a second parameter). So combining this with Soviut's reply:

from django.core.urlresolvers import reverse

def login(request): 
    if request.session.get('user'):
         return HttpResponseRedirect(reverse('my-named-url'))

Solution 4

from django.core.urlresolvers import reverse
from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect(reverse('name-of-url'))

Also see https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls

Share:
30,339
Akoi Meexx
Author by

Akoi Meexx

dev_languages = {'general':'python', 'general':'vb', 'web':'css', 'web':'js', 'web':'php', 'web':'xhtml', 'database':'mysql',} design_skills = {'graphics':'The GIMP', 'graphics':'Inkscape', 'graphics':'MS Paint', 'graphics':'Photoshop',} useful_skills = {'dev':'Regex Magic', 'design':'User Experience', 'personal':'Patience',} personal_info = {'goal':'world domination', 'alignment':'neutral evil', 'answer':'42', 'quote':'...',} links = {'REST':'http://rest.elkstein.org/', 'Search':'http://www.google.com/',}

Updated on May 08, 2020

Comments

  • Akoi Meexx
    Akoi Meexx about 4 years

    I'm writing a member-based web application, and I need to be able to redirect the page after login. I want to use the named url from my urls.py script in my views.py file for the login application, but I can't for the life of me figure out what to do. What I have is this:

    def login(request): 
    if request.session.has_key('user'):
        if request.session['user'] is not None:
            return HttpResponseRedirect('/path/to/page.html')
    

    What I want to accomplish is something like:

    def login(request): 
    if request.session.has_key('user'):
        if request.session['user'] is not None:
            return HttpResponseRedirect url pageName
    

    I get syntax errors when I execute this, any ideas?