如何在Django中创建一个等待页面

我正在构建一个需要长时间计算的应用程序。 用户提交信息后,需要大约30分钟来计算,然后返回结果。 所以我正在考虑添加一个“请稍候”页面。

我按照以下链接中提到的说明进行操作, http://groups.google.com/group/django-users/browse_thread/thread/c1b0d916bbf86868但是,当我提交内容时,它会保留在http://127.0.0.1:8000/please_wait并不会重定向到结果页面,如http://127.0.0.1:8000/display_DHM

有谁知道发生了什么事?

以下是所有相关文件,我尝试了各种方法,但是当我提交表单时,它只返回please_wait页面,然后永远保留在那里。 没有重定向发生。 因为我想检查它是否先工作,所以代码中没有实际的计算。

url.py

 urlpatterns = patterns('', (r'^test$',views.test_form), (r'^please_wait', views.please_wait), url(r'^run_DHM$', views.run_DHM, name="run_DHM") , url(r'^displayDHM', views.display_DHM, name="displayDHM") ) 

view.py

 def test_form(request): return render_to_response('test.html') def please_wait(request): return render_to_response('please_wait.html') def run_DHM(request): ### lengthy calculations... ... return HttpResponse("OK") def display_DHM(request): return render_to_response('display_DHM.html') 

的test.html

 {% extends "baseFrame.html" %} {% block maincontent %} 

Test:

Type your value in here:

{% endblock %}

please_wait.html

 Please wait  $.getJSON('{% url run_DHM %}', function(data) { if (data == 'OK') { window.location.href = '{% url displayDHM %}'; } else { alert(data); } });   

display_DHM.html

  END FINALLY!  

我在这里写,因为我不能使用评论空间。 我的问题与你的问题有点相似,也许答案可以帮助你。

简述:

问题:

我有一个名为c.py的外部python程序,它可以“计算”最多20秒。 我从我的Django app views.py中调用它,在html页面中我有一个按钮来启动它。 没关系(=在Eclipse中我可以看到当我按下网页上的按钮时c.py打印0,1,2,3,… 20但是我希望按钮从“GO”变为“WAIT” “在c.py过程中(或者我想在计数过程中执行等待页面或弹出窗口)。

答案:

您需要能够通过ajax long polling或WebSockets向客户端报告c的状态,或者,如果您不关心c的增量状态并且只想更改链接的文本,那么”当链接的click事件触发时,需要使用JavaScript来设置值:

views.py

 from django.core.urlresolvers import reverse from django.http import JsonResponse def conta(request): c.prova(0) redirect = reverse('name_of_home_user_view') return JsonResponse({'redirect': redirect}) 

js

 // assuming jQuery for brevity... $(document).ready(function() { // avoid hard-coding urls... var yourApp = { contaUrl: "{% url 'conta' %}" }; $('#btnGo').click(function(e) { e.preventDefault(); // prevent the link from navigating // set css classes and text of button $(this) .removeClass('btn-primary') .addClass('btn-danger') .text('WAIT'); $.get(yourApp.contaUrl, function(json) { window.top = json.redirect; }); }); }); 

如果你需要冗长的计算,我想你可能会对芹菜感兴趣。 好的等待页面(进度指标?)将是副产品。