我有一个视图(登录视图)。这将由/login/
网址使用。
我的意思是http://<base-url>/login/
我在做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上我有一个表单(要求用户在文本框中输入一些东西。)并在这个主页的末尾点击这个提交按钮后有提交按钮我将保存所有输入的细节在DB中。 我可以做所有这些事情,但我一直在重定向部分(我能够更改html页面(我的意思是在成功登录后显示“home.html”的内容))
但是我无法更改网址。它仍然是/login/
但我希望它是/home/
。
显然我有另一个home.html视图,它将处理从表单到数据库的数据。
答案 0 :(得分:1)
您需要做的是让登录视图在成功时返回重定向。例如:
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')
答案 1 :(得分:0)
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def login(request):
If success:
return HttpResponseRedirect(reverse('home.view'));
url(r'^home/$', 'home', name='home.view')
,您的主视图将如下所示
def home(request):
return render(request, 'home.html');
这有点类似于Joey给出的答案,因为django文档建议写一次所以更喜欢写reverse