вернуть вывод из сельдерея в html iframe с flask - PullRequest
0 голосов
/ 31 марта 2020

У меня есть страница html с формой и фреймом для отображения состояния и результата, поступающего из сельдерея:

<html>
<head></head>
<body>
    <h2>Here is a title</h2>

    <form id="form" action="transcode" method="post">
      <label for="mediaid">mediaID</label>
      <br>
      <input type="text" name="mediaid" value="" required>
      <input id="submit" type="submit" value="Transcodeer">
    </form>

    <iframe id='dynamic-content' src="{{ url_for('refreshing') }}" frameborder="0"/>
</body>
</html>

Это обновление. html страница:

<html>
    <head>
      {% if refresh %}
        <meta http-equiv="refresh" content="5">
      {% endif %}
    </head>
    <body>{{result}}</body>
</html>

Я вставляю обновляющий iframe через маршрут в flask:

@application.route('/refreshing.html')
def refreshing():
    return render_template('refreshing.html')

@application.route('/audiotranscode')
def homepage():
    html = render_template('homepage.html')
    return html

def get_template(data, refresh=False):
    return render_template_string('refreshing.html', result=data, refresh=refresh)

@application.route('/transcode', methods=['GET','POST'])
def transcode():
    dmguid = request.form['mediaid']
    task = processing.delay(dmguid)
    return redirect(url_for('result', task_id=task.id))

@application.route('/result/<string:task_id>')
def result(task_id):
    async_result = AsyncResult(id=task_id, app=celery)
    processing_state = async_result.state
    if processing_state in ['PENDING', 'STARTED', 'RETRY', 'REVOKED', 'FAILED']:
        return get_template(processing_state, refresh=True)
    if processing_state == 'SUCCESS':
        processing_result = async_result.get()
        return get_template(processing_result)

@celery.task(name='file.processing')
def processing(dmguid):
    return start_job(dmguid)

if __name__ == '__main__':
    application.run(host='0.0.0.0')

Затем я пытаюсь обновить iframe с помощью функции get_template, но теперь это перезагружает всю страницу. Как я могу сделать это только обновить iframe?

...