Django与urls.py:如何通过命名的URL使用HttpResponseRedirect?

29 投票
4 回答
32278 浏览
提问于 2025-04-15 13:17

我正在写一个基于会员的网站应用程序,我需要在登录后能够重定向到另一个页面。我想在我的views.py文件中使用urls.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

当我执行这个时出现了语法错误,有什么建议吗?

4 个回答

7

更简洁的写法可以是 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'))
15

Django 1.3 版本开始,正确的答案是,重定向方法会自动进行反向调用,具体代码如下:

from django.shortcuts import redirect

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

你需要使用 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 是用来满足你网址中正则表达式的所有参数。你也可以通过传递一个字典来提供命名参数。

撰写回答