Django и urls.py: Как я могу HttpResponseRedirect через именованный URL?
-
05-07-2019 - |
Вопрос
Я пишу веб-приложение для членов, и мне нужно иметь возможность перенаправить страницу после входа в систему. Я хочу использовать именованный 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