Django和urls.py:我如何通过一个名为url的HttpResponseRedirect?
-
05-07-2019 - |
题
我正在编写基于成员的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
执行此操作时出现语法错误,有什么想法吗?
解决方案
您需要使用 < code> reverse() utils function。
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正则表达式中的所有参数。您还可以通过传递字典来提供命名的args。
其他提示
来自 Django 1.3以后,其中重定向方法隐式执行反向调用,是:
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
如果request.session.get('user'),写一个if语句将是的更简洁的方法。 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'))
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 /主题/ HTTP /网址/#反向的分辨率的URL
不隶属于 StackOverflow