Django:通过HttpResponse流式传输动态生成的XML输出

Leo*_*ros 4 python xml django

最近我想通过Django视图返回一个动态生成的XML树.我用于XML操作的模块是通常的cElementTree.

我想我通过以下方式解决了我想要的问题:

def view1(request):
    resp = HttpResponse(g())
    return resp

def g():
     root = Element("ist")
     list_stamp = SubElement(root, "list_timestamp")
     list_creation = str(datetime.now())

     for i in range(1,1000000):
         root.text = str(i)
         yield cET.tostring(root)
Run Code Online (Sandbox Code Playgroud)

这样的事情是个好主意吗?我错过了什么吗?

小智 11

关于中间件"打破"流媒体:

如果在设置USE_ETAGS = True中设置,CommonMiddleware将尝试使用整个迭代器.但是在现代Django(1.1)中,有一种比CommonMiddleware + ConditionalGetMiddleware - conditiondecorator更好的方法来进行条件获取.使用它,您的流媒体将流畅运行:-)

尝试使用迭代器的另一件事是GzipMiddleware.如果您想使用它,您可以通过将其转换为装饰器并应用于单个视图而不是全局视图来避免压缩流式响应.