我目前正在Django开发一个webapp。在我的提交页面上('提交.html'使用'SubmissionView'),用户可以提交一些数据并选中一些复选框。所有这些都得到处理(这可能需要一些时间),然后输出表显示在'输出.html'(带“OutputView”)。在
我想要的是当表单被提交时,用户被重定向到进程.html'页面(带有'ProcessView'),其中一个带有javascript的虚拟进度条将可见,只是让用户知道处理数据需要多长时间。当所有处理完毕且结果可用时,用户将自动重定向到'输出.html'结果表将可见。在
到目前为止,我成功地将来自请求.POST从SubmissionView到ProcessView,所有内容都得到处理并再次重定向到OutputView。但是!提交表单时,它只保留在提交.html页面(在url下面有加载条),当一切都在处理中时,输出将显示在输出.html. 这个进程.html页面从不显示。在
我不知道如何先展示进程.html页,在后台运行分析(在我的ProcessView中),完成后显示输出。谁能帮忙吗?在
我的提交视图:
class SubmissionView(View):
def get(self, request, *args, **kwargs):
form = UploadFileModelForm(request.POST, request.FILES)
mailform = Email()
context = {
"form":form,
"mailform": mailform,
}
return render(request, "webtool/submission.html", context)
def post(self, request, *args, **kwargs):
form = UploadFileModelForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save()
#Some stuff gets done here
request.session['toprocess'] = {
"somevar": somevar,
}
return render(request, "webtool/process.html")
我的流程视图:
^{pr2}$我的输出视图:
class OutputView(View):
def get(self, request, *args, **kwargs):
#some stuff gets done here
return render(request, "webtool/output.html", context)
更新:
class SubmissionView(View):
def get(self, request, *args, **kwargs):
form = UploadFileModelForm(request.POST, request.FILES)
mailform = Email()
context = {
"form":form,
"mailform": mailform,
}
return render(request, "webtool/submission.html", context)
def post(self, request, *args, **kwargs):
form = UploadFileModelForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save()
#Some stuff gets done here
request.session['toprocess'] = {
"somevar": somevar,
}
return redirect(reverse('process'))
class ProcessView(View):
def get(self, request, *args, **kwargs):
#This is what initializes the celery task
result = task.delay()
if result.ready() == False:
return redirect(reverse('process'))
elif result.ready() == True:
return render(request, "webtool/output.html")
理想情况下
但是
您的提交视图实际上并没有重定向到您的流程视图。它只是呈现流程模板,但只在SubmissionView中运行post方法。在
相反,提交后视图将必须使用
return HttpResponseRedirect
重定向到reverse('process')
。将重定向到ProcessView。在然后,当ProcessView上的加载条完成时,javascript必须重定向到OutputView(它必须能够访问SubmissionView中的输入)
相关问题 更多 >
编程相关推荐