我正在构建一个需要冗长计算的应用程序。用户提交信息后,需要大约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页面,然后留在那里 永远。没有重定向发生。 因为我想检查它是否先工作,所以没有实际的 在代码中计算。
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")
)
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')
{% extends "baseFrame.html" %}
{% block maincontent %}
<form method="POST" action="please_wait">
<p>Test:</p>
<div id="address"></div>
<p>Type your value in here:</p>
<p><textarea name="order" rows="6" cols="50" id="order"></
textarea></p>
<p><input type="submit" value="submit" id="submit" /></p>
</form>
{% endblock %}
<html>Please wait
<script type="text/javascript" src="http://code.jquery.com/
jquery-1.7.1.min.js">
$.getJSON('{% url run_DHM %}', function(data) {
if (data == 'OK') {
window.location.href = '{% url displayDHM %}';
} else {
alert(data);
}
});
</script>
</html>
<HTML>
<BODY>END FINALLY!</BODY>
</HTML>
答案 0 :(得分:1)
我在这里写,因为我无法使用评论空间。我的question与你的有点类似,也许答案可以帮到你。
简言之:
问题:
我有一个名为c.py的外部python程序,其中&#34;计数&#34;最多20秒。我从我的Django应用程序views.py中调用它,在html页面中我有一个按钮来启动它。没关系(=在Eclipse中我可以看到当我按下网页上的按钮时c.py打印0,1,2,3,... 20)但我希望按钮从&#更改34; GO&#34;到&#34;等待&#34;在c.py过程中(或者我想在计数过程中执行等待页面或弹出窗口)。
答案:
您需要能够向客户端报告c的状态 通过ajax长轮询或WebSockets,或者,如果你不关心 c的增量状态,只想更改链接的文本, 你需要使用JavaScript来设置click事件时的值 链接火了:
<强> 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; }); }); });
答案 1 :(得分:0)
如果您需要冗长的计算,我认为您可能对celery感兴趣。好的等待页面(进度指标?)将是副产品。