【问题标题】:HttpResponseRedirect not working Django 1.7HttpResponseRedirect 不工作 Django 1.7
【发布时间】:2015-06-14 18:34:32
【问题描述】:

我在 Django 中遇到了 HttpResponseRedirect 的问题。看来,无论我尝试什么参数,它要么引发错误,要么在不更改 URL 的情况下重定向。我在自定义 login_user 视图上使用它,并且我希望地址栏中的 URL 在重定向后更改。如果我使用重定向而不是 HttpResponseRedirect,它不会改变。无论哪种方式,我都可以让它提供正确的模板,但 URL 保持不变。作为 Django 的新手,如果有人可以向我解释如何执行此操作以及为什么我当前的代码不起作用,那将会很有帮助。 我在 Stack Exchange 上看到过几个类似的问题,但答案没有帮助。

这是我的views.py的相关部分(请注意,由于此处的复制和粘贴,缩进变得很奇怪,这不是错误的原因)。

from django.http import *
from django.contrib.auth import authenticate, login, logout

def login_user(request):
    logout(request)
    username = password = ''
if request.POST:
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return HttpResponseRedirect('dashboard')
        else:
            state = "Your account is not active, please contact the app administrator."
    else:
        state = "Your username and/or password were incorrect."
state = "Please log in below..."
context = RequestContext(request, {
    'state': state,
    'username': username,
})
return render_to_response('bank/auth.html', {}, context)

dashboard 是另一个视图的名称,它可以在我的索引视图的重定向中正常工作。我也尝试过硬编码网址,但这也不起作用。有什么建议??谢谢。

【问题讨论】:

  • HttpResponseRedirect 需要一个有效的url 类似的东西(例如:如果你想重定向到localhost:8000/ 你必须打电话给HttpResponseRedirect('/')

标签: django


【解决方案1】:

如果您使用HttpResponseRedirect,您必须提供网址,而不是网址的名称。

您可以使用reverse获取网址:

from django.core.urlresolvers import reverse 

def my_view(request):
    ...
    return HttpResponseRedirect(reverse('dashboard'))

或使用redirect 快捷方式。

from django.shortcuts import redirect

def my_view(request):
    ...
    return redirect('dashboard')

如果使用上述任何一种方法都不起作用,那么视图中的其他地方可能存在错误。很难说在哪里,因为缩进不正确。尝试添加一些日志记录或打印语句,看看您是否真的将重定向返回到您认为的位置。

【讨论】:

    【解决方案2】:

    我个人更喜欢如下简单的方式:

    urls.py 中:

    url(r'^dashboard/$', 'appname.views.dashboard_view', name='dashboard_view'), 
    

    views.py 中:

    from django.http import HttpResponseRedirect
    
    def dashboard_view(request):
        ...
        return HttpResponseRedirect('/dashboard/')
    

    【讨论】:

    • 嗨,Sibtain,当我们使用 HttpResponseRedirect()/reverse()/simple redirect() 时,浏览器中的 URL 没有变化。可能是什么问题?有关更多详细信息,请查看我的问题:stackoverflow.com/questions/31085439/…
    【解决方案3】:

    在这种特殊情况下,问题与我的视图代码无关,实际上是使用 JQuery mobile 引起的问题。我在这里找到了答案:Error with Redirects in JQuery Mobile 这是在页面 div 上设置 data-url 属性。 但是,我对 Alasdair 的回答投了赞成票,因为他的方式是我尝试过的正确方式之一。

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 2017-11-25
      • 2011-08-14
      • 2010-10-28
      • 2018-11-15
      • 1970-01-01
      • 2015-07-03
      • 2012-01-06
      • 2014-11-01
      相关资源
      最近更新 更多