在Django 1.6中从视图重定向到另一个带有新URL的HTML页面

1 投票
2 回答
9008 浏览
提问于 2025-04-18 09:59

我有一个登录页面,它会通过 /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')

撰写回答