27

我正在编写一个基于成员的 Web 应用程序,我需要能够在登录后重定向页面。我想在我的views.py文件中使用我的urls.py脚本中的命名url来登录应用程序,但我一生都无法弄清楚该怎么做。我所拥有的是:

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

执行此操作时出现语法错误,有什么想法吗?

4

4 回答 4

46

您需要使用reverse()utils 功能。

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

Whereargs满足 url 正则表达式中的所有参数。您还可以通过传递字典来提供命名参数。

于 2009-07-30T19:35:34.443 回答
15

从Django 1.3 开始,重定向方法隐式执行反向调用的正确答案是:

from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')
于 2014-07-25T08:06:39.217 回答
7

一种更简洁的方式来编写 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'))
于 2009-07-31T07:56:54.810 回答
3
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

于 2014-05-19T09:31:56.710 回答