在Django 1.6中从视图重定向到另一个带有新URL的HTML页面
我有一个登录页面,它会通过 /login/
这个网址来访问。
也就是说,网址是 http://<base-url>/login/
在 urls.py 文件里,我写了 url(r'^login/$',myapp.views.login)
def login(request,template='login.html'):
#do login stuff
If successfully logged-in:
then redirect to new html page with new url let say '/home/'
else:
show same login page again and ask user to enter valid credentials
所以如果用户成功登录,我想把他们转到一个新的链接 http://<base-url>/home/
,这个链接应该和模板文件夹里的 "home.html" 文件关联(而 "login.html" 文件已经在那了)。
在这个 home.html 页面上,我有一个表单(让用户在文本框里输入一些东西),在这个主页的最后有一个提交按钮,点击这个按钮后,我会把所有输入的内容保存到数据库里。
我能做到这些,但我在重定向这部分遇到了问题(我能改变显示的页面内容,也就是说成功登录后会显示 "home.html" 的内容)。
但是我无法改变网址的后缀,它仍然是 /login/
,而我想要的是 /home/
。
显然,我还有另一个视图来处理从表单保存数据到数据库的操作。
2 个回答
0
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def login(request):
If success:
return HttpResponseRedirect(reverse('home.view'));
在你的 urls.py 文件中
url(r'^home/$', 'home', name='home.view')
而你的主页视图看起来会像这样
def home(request):
return render(request, 'home.html');
这和 Joey 给出的答案有点相似,因为 Django 文档建议只写一次,所以我们更倾向于使用 reverse
来写
2
你需要做的是让登录界面在成功登录后返回一个重定向。比如说:
from django.http import HttpResponseRedirect
def login(request, template='login.html'):
if successfully logged in:
return HttpResponseRedirect('/home/')
...
在这个例子中,/home/ 需要在你的 urls.py 文件中添加一个新的入口和一个新的视图。比如:
urls.py:
url(r'^home/$', 'myapp.views.home'),
views.py:
def home(request):
return render(request, 'home.html')