這是因爲重定向到視圖會錯過您用於首先呈現頁面的原始上下文。
這裏只是缺少一個簡單的邏輯。您正試圖再次呈現相同的模板,但沒有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