Django и urls.py: Как я могу HttpResponseRedirect через именованный URL?

StackOverflow https://stackoverflow.com/questions/1208802

Вопрос

Я пишу веб-приложение для членов, и мне нужно иметь возможность перенаправить страницу после входа в систему. Я хочу использовать именованный URL из моего скрипта urls.py в моем файле views.py для приложения входа в систему, но я не могу понять, что мне делать. Вот что у меня есть:

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

То, что я хочу сделать, это что-то вроде:

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

При выполнении этого я получаю синтаксические ошибки, есть идеи?

Это было полезно?

Решение

Вам необходимо использовать < code> reverse () использует функцию.

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]))

Где args удовлетворяет всем аргументам в регулярном выражении вашего URL. Вы также можете предоставить именованные аргументы, передав словарь.

Другие советы

Правильный ответ от Django 1.3 и далее , где метод перенаправления неявно выполняет обратный вызов, выглядит так:

from django.shortcuts import redirect

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

Более краткий способ написать, что оператор if будет if request.session.get ('user') . has_key устарел в наше время, и .get () возвращает None (по умолчанию, можно изменить, передав второй параметр). Итак, совмещая это с ответом Совюта:

from django.core.urlresolvers import reverse

def login(request): 
    if request.session.get('user'):
         return HttpResponseRedirect(reverse('my-named-url'))
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'))

Также см. https: // docs. .djangoproject.com / о / DEV / темы / HTTP / URLs / # обратного разрешение-на-URLs

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top