django登录后返回最后一页

django登录后返回最后一页,django,redirect,login,decorator,Django,Redirect,Login,Decorator,如果我的用户未登录并且遇到@login\u必需的装饰程序,它将被发送到我的login\u用户视图。登录后,它将被发送到我的索引。如何重定向到上一页 def login_user(request): login_form = LoginForm(request.POST or None) if request.POST and login_form.is_valid(): user = login_form.login(request) if use

如果我的用户未登录并且遇到@login\u必需的装饰程序,它将被发送到我的login\u用户视图。登录后,它将被发送到我的索引。如何重定向到上一页

def login_user(request):
    login_form = LoginForm(request.POST or None)
    if request.POST and login_form.is_valid():
        user = login_form.login(request)
        if user:
            login(request, user)
            if request.POST['next'] != "":
                return HttpResponseRedirect(request.POST['next'])
            else:
                return HttpResponseRedirect(reverse('index'))

    #return render(request, 'login.html', {'login_form': login_form })
    return render_to_response('login.html', {'login_form': login_form}, context_instance=RequestContext(request))
现在我一直在看:
但是我不知道如何使用它,因为我没有用链接发送他们登录,而是用修饰符来登录。所需的
login\u
decorator注释登录url,并在GET参数中添加
next
字段。看

e、 g.如果
LOGIN\u URL
/LOGIN
则变为
/LOGIN?next=/polls/3/vote

这将传递到您的登录视图,您可以在其中使用它

  • 以请求感知的方式在GET或errorneos POST时呈现登录页面。请注意,您需要将请求变量传递给模板rendercontext。见和

  • 在模板中,在登录表单中添加类似的行

    <input type="hidden" name="next" value="{{ next }}">
    

  • 我希望这能澄清一些问题。

    我做了以下工作:

    def login_user(request):
        login_form = LoginForm(request.POST or None)
    
        if request.POST and login_form.is_valid():
            user = login_form.login(request)
            if user:
                login(request, user)
                return HttpResponseRedirect(request.POST.get('next', reverse('index')))
    
        return render(request, 'login.html', {'login_form': login_form, 'next': request.GET.get('next', '') })
        #return render_to_response('login.html', {'login_form': login_form, 'next': request.GET.get('next', '')}, context_instance=RequestContext(request))
    
    还包括

    <input type="hidden" name="next" value="{{ next }}">
    
    
    

    在我的login.html登录表单中

    正确!否决权,这正是我想说的谢谢,我想我现在更好地理解了这个概念,以及为什么我被重定向到我的登录,我得到了例如:/login/?next=/admin/item/create/但是现在我不确定我如何给{next}值/admin/item/create/(仍然要转到我的登录重定向url)以及使用呈现(请求、,“”)快捷方式?它是由
    login\u required
    decorator自动完成的,只是因为它在那里。欢迎使用django magic;-)现在我想我离它更近了一步,添加了代码和hiddne字段。但不知怎的,我的{next}总是空的(通过尝试打印它来检查),它不是调试器。它为你的网站添加了一个工具栏(而
    settings.DEBUG
    True
    )。它显示完整的呈现上下文、搜索的模板路径、执行的db查询等。这样,您就不用编写调试语句,而只需检查上下文变量是否存在以及它的值。将其包含在登录表单的登录模板中。编辑您的帖子以反映解决方案非常好,但最好在第二个代码块,这样人们可以比较错误的代码和正确的代码。如果你这样做,我会把你的问题向上投票:-)
    def login_user(request):
        login_form = LoginForm(request.POST or None)
    
        if request.POST and login_form.is_valid():
            user = login_form.login(request)
            if user:
                login(request, user)
                return HttpResponseRedirect(request.POST.get('next', reverse('index')))
    
        return render(request, 'login.html', {'login_form': login_form, 'next': request.GET.get('next', '') })
        #return render_to_response('login.html', {'login_form': login_form, 'next': request.GET.get('next', '')}, context_instance=RequestContext(request))
    
    <input type="hidden" name="next" value="{{ next }}">