Для вывода процесса выполнения функции на странице HTML в Django, можно воспользоваться асинхронными запросами и технологией Server-Sent Events (SSE).
1. Сначала, создайте представление Django, которое будет обрабатывать асинхронные запросы и отправлять обновления в режиме реального времени. Например, у вас может быть представление с именем progress_view
, которое будет обрабатывать асинхронные запросы и возвращать обновления о прогрессе выполнения вашей функции.
from django.http import JsonResponse from django.views.decorators.http import require_GET @require_GET def progress_view(request): # Ваш код для проверки прогресса выполнения функции # и формирования соответствующего ответа progress = { 'status': 'in_progress', 'progress': 50, # Пример данных о прогрессе выполнения 'message': 'Выполняется функция...', } return JsonResponse(progress)
2. В HTML-шаблоне, в котором вы хотите отобразить прогресс выполнения, добавьте следующий скрипт:
<script> var eventSource = new EventSource("{% url 'progress_view' %}"); eventSource.onmessage = function(event) { var progress = JSON.parse(event.data); if (progress.status === 'in_progress') { // Обновление прогресса на странице document.getElementById("progress").innerHTML = 'Прогресс: ' + progress.progress + '%'; document.getElementById("message").innerHTML = progress.message; } else if (progress.status === 'completed') { // Действия, которые нужно выполнить после завершения // функции (например, скрыть индикатор прогресса) document.getElementById("progress").innerHTML = 'Выполнено!'; document.getElementById("message").innerHTML = ''; eventSource.close(); } }; </script> <div id="progress"></div> <div id="message"></div>
В этом примере скрипт создает новое соединение EventSource с URL progress_view
, который будет обрабатывать асинхронные запросы и отправлять обновления о прогрессе выполнения функции. Когда прогресс выполняется, скрипт обновляет элементы HTML с идентификаторами progress
и message
, отображая состояние выполнения функции.
3. Добавьте URL-маршрут в файл urls.py
вашего Django-приложения, чтобы связать представление progress_view
с URL progress/
.
from django.urls import path from .views import progress_view urlpatterns = [ path('progress/', progress_view, name='progress_view'), # ... ]
Теперь, при запуске вашего Django-приложения и переходе на соответствующую страницу, вы будете видеть вывод прогресса выполнения вашей функции в режиме реального времени. Обратите внимание, что вам необходимо обновлять данные о прогрессе в представлении progress_view
в соответствии с вашей логикой выполнения функции.