【发布时间】:2016-07-22 22:08:32
【问题描述】:
我有一个非常简单的索引页面视图,用户可以从中填写一个登录弹出窗口,它会向 /login 发送一个 post 请求
def index(request):
"""Shows list of studyspaces, along with corresponding 'busyness' score"""
context = {'study_space_list': StudySpace.objects.order_by('-avg_rating')}
if request.user.is_authenticated():
context['user'] = request.user
else:
context['login_form'] = LoginForm()
context['user_form'] = UserForm()
context['student_form'] = StudentForm()
return render(request, 'spacefinder/index.html', context)
如果登录是有效,它只是重定向到索引页面,这很好用。
登录视图如下:
def user_login(request):
form = LoginForm(request.POST)
if request.method == 'POST' and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return redirect(reverse('spacefinder:index'))
# Load the context all over again
context = {
'study_space_list': StudySpace.objects.order_by('-avg_rating')
}
context['login_form'] = form
context['user_form'] = UserForm()
context['student_form'] = StudentForm()
return render(request, 'spacefinder/index.html', context)
但是,当登录不正确时,我希望能够刷新页面并在索引模板中显示登录表单错误(在登录弹出窗口中)
我实际上可以使用上面的代码实现这一点,但我对解决方案不满意,原因如下:
- 我必须重新手动获取上下文,例如用户/学生表格和学习空间,这违反了 DRY 原则
- 刷新页面时,url为
localhost:8000/spacefinder/login
行为截图here
我想知道是否有某种方法可以使用重定向重新加载索引页面并以某种方式从我的 login_form 传递错误,例如类似:
return redirect('spacefinder:index', {'login_form': form})
我已经研究过使用消息来传递表单验证错误,但是由于在 forms.py 中引发了验证错误,因此很难让它工作,并且我无法从 ModalForm 中获取请求实例以正确创建留言
【问题讨论】:
标签: python django forms redirect