Django и urls.py: Как мне HttpResponseRedirect через именованный URL?
Я пишу веб-приложение на основе членов, и мне нужно иметь возможность перенаправлять страницу после входа в систему. Я хочу использовать именованный URL-адрес из моего urls.py script в моем файле 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
Я получаю синтаксические ошибки, когда я выполняю это, любые идеи?
Ответы
Ответ 1
Вам нужно использовать функцию 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. Вы также можете предоставить именованные аргументы, передав словарь.
Ответ 2
Правильный ответ, начиная с Django 1.3 и далее, где метод redirect неявно выполняет обратный вызов:
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
Ответ 3
Более сжатый способ написать, что if будет if request.session.get('user')
. В настоящее время has_key устарела, а .get() возвращает None (по умолчанию, сменяется передачей второго параметра).
Объединив это с ответом Soviut:
from django.core.urlresolvers import reverse
def login(request):
if request.session.get('user'):
return HttpResponseRedirect(reverse('my-named-url'))
Ответ 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'))
Также см. https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls