Я пытался отобразить статус обработки для пользователя во внешнем интерфейсе, когда использовал 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>
вместо добавления предыдущего дохода я хочу, чтобы шаблон был заполнен текущим доходом.






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)
Так не получится.
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
Что это? Множественные возвраты?