Как создать страницу ожидания в Django - PullRequest
2 голосов
/ 15 декабря 2011

Я создаю приложение, которое требует длительного расчета.После того, как пользователь отправил информацию, ему нужно около 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 %}
 <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 %}

please_wait.html

<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>

display_DHM.html

<HTML>
<BODY>END FINALLY!</BODY>
</HTML>

Ответы [ 2 ]

1 голос
/ 17 марта 2015

Я пишу здесь, потому что не могу использовать место для комментариев. Мой вопрос немного похож на ваш, и, возможно, ответ поможет вам.

Коротко:

вопрос:

У меня есть внешняя программа на python, названная c.py, которая «считает» до 20 секунд. Я звоню из моего приложения Django views.py и на html-странице у меня есть кнопка, чтобы запустить его. Это нормально (= в Eclipse я вижу, что c.py печатает 0,1,2,3, ... 20, когда я нажимаю кнопку на веб-странице), но мне бы хотелось, чтобы кнопка менялась с «GO» на «WAIT» "во время процесса c.py (или я хотел бы выполнить страницу ожидания во время подсчета или также всплывающее окно).

ответ:

Вы должны быть в состоянии сообщить клиенту статус c через ajax long polling или WebSockets, или, если вас не волнует инкрементный статус c и просто хочу изменить текст ссылки, вам нужно будет использовать 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;
        });
    });
});
0 голосов
/ 15 декабря 2011

Если вам нужны длительные вычисления, думаю, вас может заинтересовать сельдерей . Хорошие страницы ожидания (индикаторы прогресса?) Были бы побочным продуктом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...