Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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'))