Отображать текущий статус только для шаблона в StreamingHttpResponse в Django

Я пытался отобразить статус обработки для пользователя во внешнем интерфейсе, когда использовал StreamingHttpResponse.

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

views.py

from django.shortcuts import render
from django.http import StreamingHttpResponse,HttpResponse
import time

def f1():
    x = 0
    while x<5:
        time.sleep(1)
        x = x+1
        code = """<p>{}</p>""".format(x)
        yield code


def home(request):
    return StreamingHttpResponse(f1())

output in the browser

 <p>1</p>
 <p>2</p>
 <p>3</p>
 <p>4</p>

expected output

1-й: <p>1</p>

2-й: <p>2</p> вместо <p>1</p><p>2</p>

3-й: <p>3</p> вместо <p>1</p><p>2</p><p>3</p>

4-й: <p>4</p> вместо <p>1</p><p>2</p>3<p></p>4<p></p>

вместо добавления предыдущего дохода я хочу, чтобы шаблон был заполнен текущим доходом.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
12
0
782
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

def f1():
    x = 1
    while x < 5:
        time.sleep(1)
        x += 1
        s = str()
        for i in range(1,x):
            s+= """<p>{}</p>""".format(str(i))
        code = s
        yield code

Я так думаю ...

def home(request):
     for z in f1():
         return StreamingHttpResponse(z)

Что это? Множественные возвраты?

Antoine Pinsard 15.04.2018 13:38
Ответ принят как подходящий

Так не получится.

def home(request):
    return StreamingHttpResponse(f1())

StreamingHttpResponse означает, что вы хотите передавать данные медленно, а не за один раз. Теперь, когда вы разместили <p>1</p> в потоке, вы не можете просто перезвонить ему и заставить его исчезнуть.

Так что у вас есть несколько вариантов, как заставить его работать.

AJAX

Вы можете со страницы сделать вызов AJAX, который обновит последний статус, и вы обновите его с помощью javascript

В этом случае вы также можете использовать существующую настройку с

JQuery постепенно читает поток AJAX?

И затем отобразите последнюю строку, хотя я не буду рекомендовать это

Затем нужно создать метод Ajax, который возвращает только текущий статус.

Socket.io

Вы можете использовать django-socketio для того же

Каналы Django

Вы можете использовать django-каналы

Но добавление sockets и channels усложнило бы вашу проблему. Итак, вы должны попытаться решить вашу проблему с помощью чистого AJAX

Другие вопросы по теме