Ok, cant quite get it. Here is what I have:

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({{ calculation_url }}, function(data) {
    if (data == 'OK') {
        window.location.href = {{ view_url }};
    }
    else {
       alert(data);
    }
    });
</script>
...

url.py
url(r'^DHM_run_start/$', please_wait, kwargs={'calculation_url':
'/run_DHM/', 'view_url':'/DHM_display/'}, name='run_DHM_start'),
url(r'^analyze_start/$', please_wait, kwargs={'calculation_url':
'/analyze_compare/', 'view_url':'/results_display/'},
name='analyze_start'),

view.py
...
def please_wait(request, calculation_url, view_url):
    c = {'calculation_url': calculation_url, 'view_url': view_url}
    return render_to_response('please_wait.html', c,
context_instance=RequestContext(request))

def run_DHM(request):
    #run calculations
    return HttpResponse('OK')


def analyze_compare(request):
    #run calculations
    return HttpResponse('OK')
...

I could have run_DHM and analyze_compare return views rather than the
HTTPResponse "OK" as you indicated but was unsure how to change the
javascript to make it work. This seems like it should work but I just
get the "please_wait" page indefinitely. Seems as if its not calling
{{ calculation_url }}.

Any ideas or elaborations (hold my hand) on JSON would be great.

Thanks,
Bradley

On Thu, Sep 9, 2010 at 12:44 PM, Alec Shaner <asha...@chumpland.org> wrote:
> 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.
>> >>> > 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.
>> >>> 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.
>> >>
>> >
>> >
>> >
>> > --
>> > 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.
>> 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.
>



-- 
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.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to