(Бутылка) Как вывести шаблон вместо предыдущей строки - PullRequest
0 голосов
/ 27 января 2019

У меня есть маршрут, который выполняет некоторые вычисления, для завершения которых может потребоваться некоторое время. Я пытаюсь отправить пользователю несколько заметок о ходе выполнения этого расчета, прежде чем маршрут вернет шаблон с результатами.

По сути, я использую gevent, чтобы выдать строку текста в iframe, когда вычисление достигло определенной фазы. В конце я хотел бы передать шаблон Bottle в iframe, но в то же время удалить все строки, которые были отправлены до последнего выхода.

У кого-нибудь есть идеи, как сделать это правильно? Я попытался сделать это, выдав короткий javascript document.body.innerHTML="" непосредственно перед выдачей шаблона, но это не работает.

from gevent import monkey; monkey.patch_all()
from time import sleep
from bottle import route, run

@route('/stream')
def stream():
    yield 'START'
    sleep(3)  # some calculation goes here
    yield template("send_results")

run(host='0.0.0.0', port=8080, server='gevent')

1 Ответ

0 голосов
/ 02 февраля 2019

При выдаче тега скрипта скрипт запускается в открытом окне.Вот пример того, как это работает.Также не используйте серверный модуль gevent бутылки, используйте его вместо этого.

from gevent import monkey; monkey.patch_all()
from gevent.pywsgi import WSGIServer
from time import sleep
import bottle
from bottle import route, template

@route('/stream')
def stream():
    yield '<h3 id="firstid">Starting</h3>'
    sleep(3)  # some calculation goes here
    yield '<script>document.getElementById("firstid").innerHTML = "Hello World";</script>'

botapp = bottle.app()
server = WSGIServer(("0.0.0.0", int(80)), botapp)
server.serve_forever()
...