A lot of ways to do this. Yes you could do it as above, but that can get ugly as you start adding more views. You can indeed access the context dictionary in please_wait.html. It's hard to say without knowing more details about your application. How does the user pass arguments (if any) used in these calculations? If you're looking for a simple way to abstract this process, consider using URL confs:
# Create a url specific to the DHM calulcation url(r'^DHM_run_start/$', please_wait, kwargs={'calculation_url': 'run_DHM'}, name='run_DHM_start'), and you'd call it like /DHM_run_start/ or # Create a URL with a regex pattern to capture a calculation_url url(r'^please_wait/(?P<calculation_url>[\d\w]+)/$', please_wait), and you'd call it like /please_wait/run_DHM/ The second option is more generic, but you'll need to validate the url argument. The first option means adding more url entries. In either case your please_wait view would be defined like: def please_wait(request, calculation_url): return render_to_response('please_wait.html', {'calculation_url': calculation_url}, ...) please_wait.html could then substitute the {{ calculation_url }} context variable as the argument to the {% url %} tag. Your run_DHM view could now return the url to redirect to instead of just 'OK'. You'll have to return the full URL, e.g., '/display_DHM/', from your run_DHM view. This is probably where you'd start thinking about a JSON response as you might return a dictionary with an result code ('OK' or 'error') along with a url to redirect the user to. window.location.href = data; Or if you've switched to a JSON response it might be data.display_url after checking that data.result = 'OK'. Hope that all makes sense. On Thu, Sep 9, 2010 at 12:00 PM, Bradley Hintze <bradle...@aggiemail.usu.edu > wrote: > OK, > > Got it working. Sorry one more question. I have a couple of places > where I'd like to display the 'Please Wait' page. I'd imagine I'd do > something similar to the following:: > > # please_wait.html > ... > <script type="text/javascript" > src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js > "></script> > <script type="text/javascript"> > if (If_come_from_pageA) { > $.get('{% url run_DHM %}', function(data) { > if (data == 'OK') { > window.location.href = '{% url display_DHM %}'; > } else { > alert(data); > } > } > else if (If_come_from_pageB) { > $.get('{% url run_analysis %}', function(data) { > if (data == 'OK') { > window.location.href = '{% url display_analysis %}'; > } else { > alert(data); > } > } > }); > </script> > > an of course configure url.py and view.py as explained previously. Is > there an easy way to do this? In other words, what are the > If_come_from_pageA and If_come_from_pageB conditions? Can I access the > context dictionary that I passed to please_wait.html? > > On Thu, Sep 9, 2010 at 11:23 AM, Bradley Hintze > <bradle...@aggiemail.usu.edu> wrote: > > Yeah, I just tried out what I wrote in my last and it worked! > > > > Thanks for all your help!!! > > > > Bradley > > > > On Thu, Sep 9, 2010 at 11:17 AM, Alec Shaner <asha...@chumpland.org> > wrote: > >> That's really a design issue up to you, i.e., how you get data from your > >> view to your template. Since I don't know the format or how much data > you're > >> storing in the session it's hard to say. I was just assuming you'd use > >> context variable(s) to pass the data to the template. I'm not intimately > >> familiar with the Session API, but isn't it just a dictionary? > >> > >> On Thu, Sep 9, 2010 at 11:05 AM, Bradley Hintze > >> <bradle...@aggiemail.usu.edu> wrote: > >>> > >>> Thanks Alec, > >>> > >>> That finally makes sense. However, I do have a question here: > >>> > >>> def display_DHM(request): > >>> # Get results from session > >>> return render_to_response('ran_DHM.html', ...) > >>> > >>> '# Get results from session'???? Would I not just do this: > >>> > >>> def display_DHM(request): > >>> return render_to_response('DHM_ran.html', request.session, ...) > >>> > >>> Or do I have to explicitly get the session data? If so, how? > >>> > >>> > >>> On Thu, Sep 9, 2010 at 10:37 AM, Alec Shaner <asha...@chumpland.org> > >>> wrote: > >>> > I feel your pain - javascript has always been a pain for me, but > >>> > libraries > >>> > like jQuery make it more bearable! > >>> > > >>> > AJAX calls are made in the background (usually asynchronously), so > they > >>> > don't directly change the page you're currently viewing in your > browser. > >>> > The > >>> > browser is responsible for dispatching the response returned from > your > >>> > AJAX > >>> > call, typically by invoking a callback function you specified when > the > >>> > AJAX > >>> > request was initiated. So you don't do a redirect from the server, > >>> > rather > >>> > you can do it using client side javascript in your callback function. > >>> > > >>> > Here is how it basically works: > >>> > 1. Please Wait page makes AJAX request to run_DHM, specifies callback > >>> > function when request completes. > >>> > 2. run_DHM performs calculations, stores results in session, returns > an > >>> > "OK" > >>> > response. > >>> > 3. Browser invokes the callback function specified in step 1, which > >>> > should > >>> > change the page to display_DHM view. > >>> > 4. display_DHM retrieves calculation results from session and renders > >>> > HTML > >>> > page. > >>> > > >>> > Your first problem is with the url template tag. You might try this: > >>> > > >>> > {% url MolProbity_Compare_test.views.run_DHM %} > >>> > > >>> > You can also use a named urls, e.g., > >>> > ... > >>> > url(r'^DHM_run/$', run_DHM, name="run_DHM"), > >>> > ... > >>> > in which case {% url run_DHM %} should also work > >>> > > >>> > Or you can just call the url directly instead of using the url > template > >>> > tag, > >>> > e.g., '/run_DHM/'. > >>> > > >>> > The request argument is always passed to your views, you don't have > to > >>> > do it > >>> > explicitly. So your run_DHM and display_DHM views will always have > that > >>> > available. Just get the session out of the request object in each > view > >>> > you > >>> > need it. > >>> > > >>> > Basic skeleton: > >>> > > >>> > # please_wait.html > >>> > ... > >>> > <script type="text/javascript" > >>> > > >>> > src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js > "></script> > >>> > <script type="text/javascript"> > >>> > $.get('{% url run_DHM %}', function(data) { > >>> > if (data == 'OK') { > >>> > window.location.href = '{% url display_DHM %}'; > >>> > } else { > >>> > alert(data); > >>> > } > >>> > }); > >>> > </script> > >>> > > >>> > Note I've used the shorthand urls above, you could just use > '/run_DHM/' > >>> > and > >>> > '/display_DHM/' instead of the url template tags. You could also use > the > >>> > full package path. Also note that the callback function I refer to is > >>> > defined inline - the function(data) ... part. > >>> > > >>> > # views.py > >>> > from django.http import HttpResponse > >>> > > >>> > def please_wait(request): > >>> > return render_to_response('please_wait.html', ...) > >>> > > >>> > def run_DHM(request): > >>> > # Do calculations, store results in request.session > >>> > ... > >>> > # If everything ok, return OK (otherwise return some error) > >>> > return HttpResponse('OK') > >>> > > >>> > def display_DHM(request): > >>> > # Get results from session > >>> > return render_to_response('ran_DHM.html', ...) > >>> > > >>> > This is over simplified, but should serve to get started if you want > to > >>> > use > >>> > this redirect approach. > >>> > > >>> > On Thu, Sep 9, 2010 at 9:59 AM, Bradley Hintze > >>> > <bradle...@aggiemail.usu.edu> > >>> > wrote: > >>> >> > >>> >> Alec, > >>> >> > >>> >> Thanks for your patience. The jquery tutorials have been > frustrating. > >>> >> Anyway, I do not have three 'views' as you suggested. I will try > that. > >>> >> But I need to understand a few things before I try that. How to call > >>> >> run_DHM from my please_wait.html page. (I assume AJAX but I've tried > >>> >> and tries what have been suggested with no success, most likely due > to > >>> >> my failed attempts at understanding AJAX) I assume after I run the > >>> >> run_DHM view function I will somehow have run_DHM redirect it to the > >>> >> display_DHM. My question is, how do I redirect AND pass the > >>> >> request.session arguments, which is where the data from run_DHM will > >>> >> be stored? > >>> >> > >>> >> As requested, here is my full url.py: > >>> >> > >>> >> from django.conf.urls.defaults import * > >>> >> from MolProbity_Compare_test.views import * > >>> >> > >>> >> # Uncomment the next two lines to enable the admin: > >>> >> # from django.contrib import admin > >>> >> # admin.autodiscover() > >>> >> > >>> >> urlpatterns = patterns('', > >>> >> (r'^home/$', home_view),#the 'index' or home or top page view > >>> >> (r'^about/$', about_view), > >>> >> (r'^log_out_confirm/$', log_out_confirm), > >>> >> (r'^log_out/$', log_out), > >>> >> (r'^upload/$', uploaded_PDBs), > >>> >> (r'^rotamer_diff/$', rotamer_dif_frame), > >>> >> (r'^side-by-side/$', side_by_side), > >>> >> (r'^side-by-side-key/$', side_by_side_key), > >>> >> (r'^side-by-side-frame/$', side_by_side_frame), > >>> >> (r'^DHM_run/$', run_DHM), > >>> >> (r'^please_wait/', please_wait), > >>> >> (r'^analyze/$', analyze_compare), > >>> >> ) > >>> >> > >>> >> > >>> >> On Thu, Sep 9, 2010 at 9:22 AM, Alec Shaner <asha...@chumpland.org> > >>> >> wrote: > >>> >> > Could you post the full url.py file? > >>> >> > > >>> > > >>> > ... > >>> > > >>> > -- > >>> > You received this message because you are subscribed to the Google > >>> > Groups > >>> > "Django users" group. > >>> > To post to this group, send email to django-us...@googlegroups.com. > >>> > To unsubscribe from this group, send email to > >>> > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > >>> > For more options, visit this group at > >>> > http://groups.google.com/group/django-users?hl=en. > >>> > > >>> > >>> > >>> > >>> -- > >>> Bradley J. Hintze > >>> Graduate Student > >>> Duke University > >>> School of Medicine > >>> 801-712-8799 > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups > >>> "Django users" group. > >>> To post to this group, send email to django-us...@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > >>> For more options, visit this group at > >>> http://groups.google.com/group/django-users?hl=en. > >>> > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups > >> "Django users" group. > >> To post to this group, send email to django-us...@googlegroups.com. > >> To unsubscribe from this group, send email to > >> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > >> For more options, visit this group at > >> http://groups.google.com/group/django-users?hl=en. > >> > > > > > > > > -- > > Bradley J. Hintze > > Graduate Student > > Duke University > > School of Medicine > > 801-712-8799 > > > > > > -- > Bradley J. Hintze > Graduate Student > Duke University > School of Medicine > 801-712-8799 > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.