当我使用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())浏览器中的输出
<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>
我希望模板中填充当前的产量,而不是附加先前的产量。
发布于 2018-04-11 07:33:59
你不能这样做。
def home(request):
return StreamingHttpResponse(f1())StreamingHttpResponse意味着您希望缓慢地流数据,而不是一次访问。现在,一旦您将<p>1</p>放置在流中,就不能简单地将其调用回并使其消失。
所以你对如何让它发挥作用几乎没有选择。
AJAX
您可以从页面中进行AJAX调用,更新最新状态,并使用javascript进行相同的更新。
在这种情况下,您也可以使用现有的安装程序
然后显示最后一行,我不推荐这样做
接下来是创建一个Ajax方法,该方法只返回当前状态。
Socket.io
您可以将django-socketio用于相同的
Django通道
您可以使用django-频道
但是添加sockets和channels对于您的问题来说将是一个附加的复杂性。因此,您应该尝试用纯AJAX来解决您的问题。
发布于 2018-03-21 06:55:30
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)https://stackoverflow.com/questions/49391687
复制相似问题