如何在模板中检测StreamingHttpReponse上下文

时间:2015-09-28 10:49:44

标签: jquery python html django

我正在使用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发生时发送上下文?

1 个答案:

答案 0 :(得分:0)

我不确定,但我认为您可能会因为为模板生成一些变量而混淆响应流式传输。

StreamingHttpResponse的目的是将迭代器传递回WSGI代码,因此可以将响应发送到客户端,而无需将其全部加载到内存中。我们在这里讨论整个响应,因此这意味着没有模板,因为模板引擎可以处理完整的文档(可以扭曲一点)。这看起来与你的例子无关。

现在关于你的例子,如果你想从迭代器生成所有内容,你必须循环它。使用{% for %}将迭代迭代器,直到它耗尽。

如果你真的想像你的例子所说的那样发送延迟的东西(也就是说,如果sleep不在那里只是为了测试目的),那么你就不走运了。你可能有的最佳猜测是:

  1. 在没有生成数据的情况下渲染您的模板(确保它不会包含结束</body></html>标记)。
  2. 创建一个迭代器,它将生成渲染模板,然后生成生成的数据。
  3. 将生成的数据放在<script>标记中,其目的是将其放在页面中的正确位置。
  4. 这是使生成器作为响应进行交互的正确方法。但是,仅适用于开发服务器。在任何生产站点上,前端将缓冲响应,除非它大于缓冲区,否则它将被延迟,直到生成器耗尽。

    TL; DR 您无法通过在答案中添加延迟来播放“动画”。