这是因为重定向到视图会错过您用于首先呈现页面的原始上下文。
这里只是缺少一个简单的逻辑。您正试图再次呈现相同的模板,但没有news_article列表。
我想(首先),您正在渲染显示文章以及登录表单的模板,方法是发送两个内容1.登录表单和2.文章列表。但其次,当用户未通过身份验证时,您不会再次传递相同的内容。作为上下文再次传递这些变量(如果表单没有处理错误消息,也可以添加错误消息)。
if user.is_authenticated():
#show success view
else:
return render_to_response('same_template.html', {
'error_msg': 'Username or password you provided was incorrect',
'news_articles': NewsArticles.objects.all()[:3],
'login_form': LoginForm(request.POST);
})
编辑:现实情况是,上下文用于呈现模板,那就是模板,它希望在进一步导航传递的全部责任。而且正如我所看到的,如果你没有进一步传递某些东西,那么你就没有更进一步。
如果您想要一些自动上下文,请开发自己的上下文处理器,如auth-context-processor,它会自动添加类似'用户'的字符,并始终可供模板使用。
顺便说一下,无论如何,即使登录通过身份验证,您也会错过这种上下文。因此,如果特定的上下文非常重要,可以尝试发送文章的主键以及登录表单提交,或者将其存储在全局(有史以来最丑陋的事情)中,或者只是重新考虑和分离流(我认为是好事)。
如果我使用django.contrib.auth.views.login,该怎么办? – AlbertoPL 2009-07-15 02:40:04
@AlbertoPL该视图没有重定向失败 – Evgeny 2009-07-15 02:52:41