在 Django 1.6 中使用另一个 url slug 从视图重定向到另一个 html 页面
Posted
技术标签:
【中文标题】在 Django 1.6 中使用另一个 url slug 从视图重定向到另一个 html 页面【英文标题】:redirecting from view to another html page with another url slug in Django 1.6 【发布时间】:2014-08-06 15:30:36 【问题描述】:我有一个视图(登录视图)。将被/login/
url 使用。
我的意思是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 上我有一个表单(要求用户在文本框中输入一些内容。)在这个主页的末尾有一个提交按钮,点击这个提交按钮后我将保存所有输入的详细信息在数据库中。 我可以做所有这些事情,但我被困在重定向部分(我能够更改 html 页面(我的意思是在成功登录后显示“home.html”的内容))
但我无法更改 url slug。还是/login/
但我希望它是/home/
。
显然我有另一个 home.html 视图,它将处理将数据从表单保存到 DB。
【问题讨论】:
【参考方案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')
【讨论】:
【参考方案2】: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
DOC
【讨论】:
以上是关于在 Django 1.6 中使用另一个 url slug 从视图重定向到另一个 html 页面的主要内容,如果未能解决你的问题,请参考以下文章