我正在使用StreamingHttpResponse
我的生成器响应是:
def generator():
for x in range(1, 20):
yield '<p>x = {}</p>{}\n'.format(x, buffer)
time.sleep(1)
我尝试捕获此值并将其放入模板代码中:
<div id="gen_x"><here></div>
所以真正的问题是如何在前端捕获这个或任何django方法在Streaming发生时发送上下文?
答案 0 :(得分:0)
我不确定,但我认为您可能会因为为模板生成一些变量而混淆响应流式传输。
StreamingHttpResponse
的目的是将迭代器传递回WSGI代码,因此可以将响应发送到客户端,而无需将其全部加载到内存中。我们在这里讨论整个响应,因此这意味着没有模板,因为模板引擎可以处理完整的文档(可以扭曲一点)。这看起来与你的例子无关。
现在关于你的例子,如果你想从迭代器生成所有内容,你必须循环它。使用{% for %}
将迭代迭代器,直到它耗尽。
如果你真的想像你的例子所说的那样发送延迟的东西(也就是说,如果sleep
不在那里只是为了测试目的),那么你就不走运了。你可能有的最佳猜测是:
</body></html>
标记)。<script>
标记中,其目的是将其放在页面中的正确位置。这是使生成器作为响应进行交互的正确方法。但是,仅适用于开发服务器。在任何生产站点上,前端将缓冲响应,除非它大于缓冲区,否则它将被延迟,直到生成器耗尽。
TL; DR 您无法通过在答案中添加延迟来播放“动画”。