Django 1.5刚刚发布,它附带了StreamingHttpResponse。现在,我已经阅读了这个讨论,第二个答案实际上在一个页面中打印出流(实际上只是数据)。
我想做的是将流响应的输出打印到模板中,而不仅仅是像讨论中那样打印数据。
我该怎么办?我必须使用javascript并调用实现StreamingHttpResponse的视图,或者有一种方法告诉django渲染模板,然后将StreamingHttpResponse数据发送到模板(然后我需要知道数据存储的变量是什么)?
编辑:到目前为止,我发现的解决方案是将最终html页面的片段写入生成器(yield)。这种解决方案的问题是,我不能有,例如,随着数据流增长的条(如加载条)。
再见
可以,但这可能不是您真正想要的,因为整个模板将被迭代。然而,无论如何,你可以为模板流化一个重新渲染的上下文。
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>
标记附加到其中,但这与模板的最初目的完全相反。(即从代码中分离表示)
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)