首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Django StreamingHttpResponse转换为模板

将Django StreamingHttpResponse转换为模板
EN

Stack Overflow用户
提问于 2013-02-28 00:14:01
回答 1查看 6.3K关注 0票数 2

Django 1.5刚刚问世,它发布了StreamingHttpResponse。现在,我已经阅读了this discussion,第二个答案实际上打印出了页面中的流(实际上只是数据)。

我想要做的是将流响应的输出打印到模板中,而不仅仅是像the discussion中那样打印数据。

我该怎么办?我是否必须使用javascript并调用实现StreamingHttpResponse的视图,或者有一种方法可以告诉django呈现模板,然后将StreamingHttpResponse数据发送到模板(然后我需要知道数据存储在哪里的变量是什么)?

编辑:到目前为止,我找到的解决方案是将最终的html页面片段写入生成器(yield)。这种解决方案的问题是,例如,我不能拥有一个随数据流一起增长的条形图(就像加载条形图)。

再见

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-12 19:43:55

是的,但它可能不是您真正想要的,因为整个模板将被迭代。但是,无论如何,您可以为模板流式传输重新呈现的上下文。

代码语言:javascript
复制
from django.http import StreamingHttpResponse
from django.template import Context, Template

#    Template code parsed once upon creation, so
#        create in module scope for better performance

t = Template('{{ mydata }} <br />\n')

def gen_rendered():
    for x in range(1,11):
        c = Context({'mydata': x})
        yield t.render(c)

def stream_view(request):
    response = StreamingHttpResponse(gen_rendered())
    return response

编辑:您也可以呈现一个模板,然后将<p><tr>标记附加到该模板上,但这与模板最初的用途完全相反。(例如,将表示与代码分开)

代码语言:javascript
复制
from django.template import loader, Context
from django.http import StreamingHttpResponse

t = loader.get_template('admin/base_site.html') # or whatever
buffer = ' ' * 1024

def gen_rendered():  
    yield t.render(Context({'varname': 'some value', 'buffer': buffer}))
    #                                                 ^^^^^^
    #    embed that {{ buffer }} somewhere in your template 
    #        (unless it's already long enough) to force display

    for x in range(1,11):
        yield '<p>x = {}</p>{}\n'.format(x, buffer)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15116881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档