使用django中的上下文处理器流式传输模板上下文

时间:2015-09-02 09:21:10

标签: python django templates django-templates template-context

所以我最近在Django中使用过一些代码,但我并不确定如何处理我在代码中遇到的问题。我尝试使用上下文流式传输模板,并且该上下文根据某个变量的值而变化,然后在一段时间后重新运行该函数以检查变量的值是否已更改。但是,这是我遇到问题的地方。模板在浏览器中加载时会中断,并且浏览器会不断尝试加载模板,直到" Broken Pipe"终端出现错误。

到目前为止我想到的一个解决方案是首先渲染模板,然后流式传输上下文。所以我一直在考虑在Django中创建一个上下文处理器,它根据前面提到的变量的值来传输模板的上下文。如果可能的话,这样做会有什么好办法呢?

可以给予任何帮助或建议。

以下是我一直在使用的代码,如果有帮助的话:

from django.shortcuts import render, render_to_response
from django.template import loader, Context
from django.http import StreamingHttpResponse
import time
from .models import prototype
def scan():
    name = 'server_1.html'
    t = loader.get_template(name)
    count = 60
    r = 1
    g = 2
    b = 3
    i = 0
    while True:
        if i == g:
            print 'Loading Template...'
            yield t.render(Context({'green' : True}))
            time.sleep(count)
        if i == r:
            print 'Loading Template...'
            yield t.render(Context({'red' : True}))
            time.sleep(count)
        if i == b:
            print 'Loading Template...'
            yield t.render(Context({'blinking' : True}))
            time.sleep(count)
       else:
            print 'Loading Template...'
            yield t.render()
            time.sleep(count)

def home(request):
    response = StreamingHttpResponse(scan())
    return response

1 个答案:

答案 0 :(得分:0)

流媒体似乎根本不是正确的解决方案。相反,您需要通过Ajax或刷新整个页面来触发页面的重新加载。您可以使用JS setTimeout或setInterval调用。