我在登录后重定向到用户登录的同一页面时遇到了麻烦,无论我多么努力地阅读这里的所有问题。我认为现在是时候向我们展示我的代码了,所以如果你能指出错误的话。感谢。
我的登录网址(在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>
答案 0 :(得分:8)
你没有将request
传递给模板上下文,所以自然它是空的。最简单的方法是使用RequestContext,它使用内置的上下文处理器将变量添加到上下文中。
通常的做法是将render_to_response
与额外参数context_instance=RequestContext(request)
一起使用。出于某种原因,您需要很长时间地渲染所有模板,因此您需要自己创建该请求上下文。
您还需要将django.core.context_processors.request
添加到CONTEXT_PROCESSORS
元组ins settings.py。