我想从django视图开始处理一些文件,我希望能够在处理文件时将文件名发送到浏览器。有没有办法(轻松)这样做?我可以使用线程和ajax调用来做到这一点,但我现在想要最简单的解决方案。
答案 0 :(得分:6)
我从{em> Andre Miller 提供的链接中找到了answer所需的内容。
我发现可以将迭代器传递给HttpResponse,所以我使用了这段代码并且工作正常:
def import_iter():
""" Used to return output as it is generated """
# First return the template
t = loader.get_template('main/qimport.htm')
c = Context()
yield t.render(c)
# Now process the files
if req.method == 'POST':
location = req.POST['location']
if location:
for finfo in import_location(location):
yield finfo+"<br/>"
return HttpResponse(import_iter())
答案 1 :(得分:2)
如果要在呈现视图时启动任务,则需要使用某种排队过程,否则在将任何内容返回到浏览器之前,该过程将首先完成。
一旦任务以异步方式运行,您可以使用AJAX更新具有最新状态的页面,或者只是使用页面内的元刷新来加载新内容。
您可以使用Django队列服务器:
http://code.google.com/p/django-queue-service/
这个问题似乎也曾被问过几次:
答案 2 :(得分:0)
如果您清除output buffer,那么您应该能够看到已处理的内容。
答案 3 :(得分:0)
我们在201X
是的,您应该使用WebSockets或Ajax调用!!
由于您在Django中询问(用于记录目的)某些流式传输解决方案,因此您可以使用Django支持的StreamingHttpResponse
。
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.StreamingHttpResponse
StreamingHttpResponse
类用于将Django的响应流式传输到浏览器。如果生成响应时间过长或占用太多内存,则可能需要执行此操作。例如,它对生成大型CSV文件很有用。
答案 4 :(得分:-2)
首先,确保输出Connection: Keep-Alive
标头,之后您必须确保脚本输出没有被缓冲。在Python中,您可以使用cgi
模块的cgiprint
函数来确保清除Python的缓冲区,但您还应检查Web服务器配置,因为有些将缓冲所有输出,直到脚本完成运行。 / p>