在 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 页面的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.6:在另一个模板中显示特定模型对象

django 1.6:创建 slug url

Django 1.6:如何访问视图中的静态文件

使用 django-allauth 登录信号将用户重定向到另一个 url

使用参数找到 Django 反向 url,但使用关键字失败

对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?