Большая часть промежуточного программного обеспечения django не позволит вам транслировать контент. Большая часть этого промежуточного программного обеспечения должна быть включена, если вы хотите использовать приложение администратора django, так что это может раздражать. К счастью, это было решено в django 1.5 release . Вы можете использовать StreamingHttpResponse , чтобы указать, что вы хотите передавать результаты обратно, и все промежуточное программное обеспечение, поставляемое с django, знает об этом и действует соответствующим образом, чтобы не буферизовать вывод содержимого, а отправлять его по прямой. Ваш код будет выглядеть следующим образом для использования нового объекта StreamingHttpResponse.
def stream_response(request):
return StreamingHttpResponse(stream_response_generator())
def stream_response_generator():
for x in range(1,11):
yield "%s\n" % x # Returns a chunk of the response to the browser
time.sleep(1)
Примечание по Apache
Я протестировал вышеописанное на Apache 2.2 с Ubuntu 13.04. Модуль apache mod_deflate, который был включен по умолчанию в тестируемой мной установке, будет буферизовать контент, который вы пытаетесь транслировать, до тех пор, пока он не достигнет определенного размера блока, затем скопирует контент и отправит его в браузер. Это предотвратит работу приведенного выше примера. Один из способов избежать этого - отключить mod_deflate, добавив следующую строку в вашу конфигурацию apache:
SetEnvIf Request_URI ^/mysite no-gzip=1
Это обсуждается более подробно в Как отключить mod_deflate в apache2? вопрос.