首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在Django中的StreamingHttpResponse中的模板上呈现当前状态

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

Stack Overflow用户
提问于 2018-03-20 18:27:54
回答 2查看 1K关注 0票数 12

当我使用StreamingHttpResponse时,我试图在前端向用户显示处理状态。

我能够获得当前状态,但它正在被附加到前一个状态。

我希望响应模板只包含当前的产量。

views.py

代码语言:javascript
复制
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())

浏览器中的输出

代码语言:javascript
复制
 <p>1</p>
 <p>2</p>
 <p>3</p>
 <p>4</p>

预期产出

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

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

第三:<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>

我希望模板中填充当前的产量,而不是附加先前的产量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 07:33:59

你不能这样做。

代码语言:javascript
复制
def home(request):
    return StreamingHttpResponse(f1())

StreamingHttpResponse意味着您希望缓慢地流数据,而不是一次访问。现在,一旦您将<p>1</p>放置在流中,就不能简单地将其调用回并使其消失。

所以你对如何让它发挥作用几乎没有选择。

AJAX

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

在这种情况下,您也可以使用现有的安装程序

jQuery递增地读取AJAX流?

然后显示最后一行,我不推荐这样做

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

Socket.io

您可以将django-socketio用于相同的

Django通道

您可以使用django-频道

但是添加socketschannels对于您的问题来说将是一个附加的复杂性。因此,您应该尝试用纯AJAX来解决您的问题。

票数 10
EN

Stack Overflow用户

发布于 2018-03-21 06:55:30

代码语言:javascript
复制
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

我想像这样..。

代码语言:javascript
复制
def home(request):
     for z in f1():
         return StreamingHttpResponse(z)
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49391687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档