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 не перезаписывает первый
Если ваши данные не слишком большие, вам следует изучить возможность отправки всего содержимого, которое вы хотите показывать на веб-странице, каждый раз, когда вы читаете какие-то новые строки.

Другие вопросы по тегам