仅在Django中的StreamingHttpResponse中的模板上呈现当前状态

sai*_*ati 12 python django python-2.7 python-3.x python-requests

当我使用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())
Run Code Online (Sandbox Code Playgroud)

在浏览器中输出

 <p>1</p>
 <p>2</p>
 <p>3</p>
 <p>4</p>
Run Code Online (Sandbox Code Playgroud)

预期产出

第一名: <p>1</p>

第二:<p>2</p>而不是 <p>1</p><p>2</p>

第3名:<p>3</p>而不是 <p>1</p><p>2</p><p>3</p>

第四:<p>4</p>而不是 <p>1</p><p>2</p>3<p></p>4<p></p>

而不是追加先前的收益率,我希望模板用当前收益率填充.

Tar*_*ani 10

你不能这样做.

def home(request):
    return StreamingHttpResponse(f1())
Run Code Online (Sandbox Code Playgroud)

A StreamingHttpResponse意味着您希望缓慢地流式传输数据而不是一次性.现在,一旦你把它放在<p>1</p>流上,你就不能只是回电话让它消失

所以你几乎没有选择如何使它工作.

AJAX

您可以从页面进行AJAX调用以更新最新状态,并使用javascript更新相同内容

在这方面,您也可以使用现有的设置

jQuery逐步读取AJAX流?

然后显示最后一行,我不会推荐这个

接下来是创建一个只返回当前状态的Ajax方法

Socket.io

您可以使用Django的socketio为同

Django频道

你可以使用django-channels

但是添加socketschannels将是你的问题的附加复杂性.所以你应该试着用纯AJAX来解决你的问题