django登录后返回上一页

Han*_*ong 3 django redirect login decorator

如果我的用户没有登录并遇到@login_required装饰器,它将被发送到我的login_user视图.登录后,它将被发送到我的索引.我怎样才能重定向到上一页.

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))
Run Code Online (Sandbox Code Playgroud)

现在我一直在看:Django:登录后重定向到上一页 但我不知道如何使用它,因为我没有发送他们登录链接,但有装饰

tik*_*ike 7

login_required装饰诠释按登录网址添加一个next字段的GET参数.请参阅login_required.

例如,如果LOGIN_URL/login它成为/login?next=/polls/3/vote

这将传递到您使用它的登录视图

  1. 以请求意识的方式在GET或errorneos POST上呈现登录页面.请注意,您需要将请求变量传递给模板rendercontext.请参阅RequestContextrender_to_response.

    return render_to_response(
            'login.html',
            my_data_dictionary,
            context_instance=RequestContext(request)
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在模板中添加这样的行到登录表单

    <input type="hidden" name="next" value="{{ next }}">
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,一个成功的POST使用此值HttpResponseRedirect,或者如果没有值next,LOGIN_REDIRECT_URL则使用next值的值.请参阅HttpResponseRedirect.

    ... user was succesfully authenticated...
    if request.POST["next"] is Not "":
        HttpResponseRedirect(request.POST["next"])
    else:
        HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
    
    Run Code Online (Sandbox Code Playgroud)

我希望这会澄清一些事情.