I have a view like this:
def form1(request):
if request.method == 'POST':
form = SyncJobForm(request.POST)
if form.is_valid():
# do something
in_progress = True
return render_to_response('form1.html', {'in_progress': in_progress})
I would like to know how to set it to refresh the template after is done with the view process. Like rendering the page after its done:
in_progress = True
return render_to_response('form1.html', {'in_progress': in_progress})
# after its finished
finished = True
return render_to_response('form1.html', {'finished': finished})
How can I implement something like this? Thanks in advance.
You can’t maintain state between page calls on a global basis, so you’ll need to store your data in the database. In addition, a view can’t negotiate anything with the browser after it has returned a page, so you need to split this into multiple views and spawn a separate thread for the job. Here’s a general outline that might help:
Then have your page
in_progress.htmlperiodically refresh the page. When the job is completed, you can display a status message infinished.html.There are more sophisticated ways to do this (write Javascript to poll the server periodically), but you’re still going to need to write separate views to respond with the appropriate information. In addition, you could use a job management framework like Celery to create and execute jobs, but again you’ll still have to create separate views to handle status information.