django - итерация по возвращению render_to_response
Я хотел бы прочитать файл, обновить сайт, прочитать больше строк, обновить сайт и т. Д. Логика приведена ниже, но она не работает. Он показывает только первую строку из файла журнала и останавливается. Есть ли способ перебрать 'return render_to_response'?
#django view вызывает удаленный скрипт python, который добавляет вывод в лог файл
proc = subprocess.Popen([program, branch, service, version, nodelist])
logfile = 'text.log'
fh = open(logfile, 'r')
while proc.poll() == None:
where = fh.tell()
line = fh.read()
if not line:
time.sleep(1)
fh.seek(where,os.SEEK_SET)
else:
output = cgi.escape(line)
output = line.replace('\n\r', '<br>')
return render_to_response('hostinfo/deployservices.html', {'response': output})
Спасибо за помощь.
3 ответа
На самом деле вы можете сделать это, сделав вашу функцию генератором, то есть, используя "yield" для возврата каждой строки.
Однако вам нужно будет создать ответ напрямую, а не использовать визуализацию для ответа.
Вместо того, чтобы заново изобретать колесо, используйте django_logtail
render_to_response
окажет первую партию на сайт и остановится. Затем веб-сайт должен как-то снова вызвать это представление, если вы хотите отправить следующую партию. Вам также придется вести запись о том, где вы были в файле журнала, чтобы второй пакет можно было прочитать с этой точки.
Я предполагаю, что у вас есть некоторая логика в шаблонах, так что второй пост для render_to_response не перезаписывает первый
Если ваши данные не слишком большие, вам следует изучить возможность отправки всего содержимого, которое вы хотите показывать на веб-странице, каждый раз, когда вы читаете какие-то новые строки.