在 django 中使用上下文处理器流式处理模板上下文

Posted

技术标签:

【中文标题】在 django 中使用上下文处理器流式处理模板上下文【英文标题】:Streaming template context using context processor in django 【发布时间】:2015-11-27 17:35:51 【问题描述】:

所以我最近一直在 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】:

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

【讨论】:

什么意思,为什么流式传输上下文似乎不是一个好的解决方案?只是好奇而已。

以上是关于在 django 中使用上下文处理器流式处理模板上下文的主要内容,如果未能解决你的问题,请参考以下文章

在不使用上下文处理器的情况下访问 django 1.7 模板中的 URL 参数

处理 django 包含模板标签中的请求

我可以在 django 模板上下文处理器中访问 url kwargs 吗?

Django模板继承下的动态数据传递—上下文处理器

Django上下文处理器

Django - 模板上下文处理器 - 破坏我的应用程序