Django重定向到当前页面

时间:2011-05-10 14:25:50

标签: django redirect

我在登录后重定向到用户登录的同一页面时遇到了麻烦,无论我多么努力地阅读这里的所有问题。我认为现在是时候向我们展示我的代码了,所以如果你能指出错误的话。感谢。

我的登录网址(在base.html模板中): 这存在于每个页面上。用户登录后更改注销。我读到我必须传递一个参数,例如'next',如下所示:

 <a href="/login/?next={{request.path}}">Login</a>

但是,

* {{request.path}}始终为空。 *

登录视图:

def mylogin(request):
    """login view"""
    try:
        redirect_to = request.GET.get('next', '/')
    except ValueError:
        redirect_to = "/"

errors = ''
t = loader.get_template('login.html')


# check for POST data
if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
            return HttpResponseRedirect(redirect_to)
        else:
            c = Context({
                'errors':'disabled',
            })
            return HttpResponse("disabled")
    else:
        c = Context({
            'errors':'incorrect',
        })
        return HttpResponse(t.render(c))
else:
    c = Context({
        'errors':None,
    })
    return HttpResponse(t.render(c))

登录表单,在login.html模板中

 <form method="post" action="?next={{ redirect_to }}" >
       <p><label for="username">Username</p>
       <p></label><input type="text" name="username" value="" id="username" /></p>
       <p><label for="password">Password</label></p>
       <p><input type="password" name="password" value="" id="password" /></p>
       <p><input type="submit" value="Login"></p>
 </form>

1 个答案:

答案 0 :(得分:8)

你没有将request传递给模板上下文,所以自然它是空的。最简单的方法是使用RequestContext,它使用内置的上下文处理器将变量添加到上下文中。

通常的做法是将render_to_response与额外参数context_instance=RequestContext(request)一起使用。出于某种原因,您需要很长时间地渲染所有模板,因此您需要自己创建该请求上下文。

您还需要将django.core.context_processors.request添加到CONTEXT_PROCESSORS元组ins settings.py。