У меня есть страница 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?