Python Django:重定向后处理表单数据
我有一个Django应用程序,有两个视图(实际上更多,但我正在简化)。第一个视图显示一个页面,其中包含关于对象的详细信息,并且有一个可以提交的表单。第二个视图称为提交表单时购买POST请求,然后重定向回第一个视图: views.py:Python Django:重定向后处理表单数据,python,django,forms,post,Python,Django,Forms,Post,我有一个Django应用程序,有两个视图(实际上更多,但我正在简化)。第一个视图显示一个页面,其中包含关于对象的详细信息,并且有一个可以提交的表单。第二个视图称为提交表单时购买POST请求,然后重定向回第一个视图: views.py: def main_view(request): context = {} # other view code here context['form'] = Form() return render(request, 'mypag
def main_view(request):
context = {}
# other view code here
context['form'] = Form()
return render(request, 'mypage.html', context)
def form_view(request):
form_data = Form(request.POST)
if form_data.is_valid():
# process form here
else:
# add an informative message
messages.add_message(request, messages.INFO, "Error message here")
return redirect('url_of_main_view')
我在这里遇到的问题是,我希望将表单数据传递回主视图,以防止再次填写整个表单,并允许显示验证错误
我通常只需在一个视图中处理表单即可完成此操作,例如:
def view(request):
context = {}
# other view code here
context['form'] = Form()
if request.method == 'POST':
form_data = Form(request.POST)
if form_data.is_valid():
# process form data
else:
# handle messages
context['form'] = form_data
return render(request, 'mypage.html', context)
然而,这(至少在我的情况下)将导致一个大的视图,因为我有许多不同的表单可以从这个页面提交。我还喜欢在表单发布后重定向,以避免在用户刷新页面时重新提交数据
我的问题是:
Alex您可以使用基于类的视图在单个类中处理get和post方法。如果表单不大,您可以简单地将验证错误作为查询参数传递回去(例如
重定向('/mainview?name=invalid%20name')
)。我想到的另一件事是从第二个视图简单地呈现主页的模板,而不是进行重定向,例如(render(request,'mypage.html',context_,with_form_errors)
)@vivekpradhan我将更详细地了解基于类的视图;我看了一些关于这个主题的简单指南,但它们只处理一个表单和一个简单视图,我也看不出它们处理重定向的方式与标准视图有什么不同。我会好好看看的,谢谢@不幸的是,CrowbarKZ的一些表单相当大,对于我估计的GET参数来说太大了,或者至少太大了,无法保证使用这种方法。主视图和页面相当复杂,因此需要重定向到该视图,或者让所有内容都从该视图运行。不过,为这个建议干杯!