Django与urls.py:如何通过命名的URL使用HttpResponseRedirect?
我正在写一个基于会员的网站应用程序,我需要在登录后能够重定向到另一个页面。我想在我的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
是用来满足你网址中正则表达式的所有参数。你也可以通过传递一个字典来提供命名参数。