#python #html #ajax #flask
Вопрос:
У меня есть файл приложения python/flask с зоной выпадения файла
, я запускаю функцию из другого файла py после загрузки файла.
Теперь мне нужно распечатать строку, когда файл будет загружен на веб-сайт
, это часть файла приложения:
logger = None
@app.route('/',methods=['POST','GET'])
def upload():
if request.method == 'POST':
f = request.files.get('file')
f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
es.main()
global logger
logger = "something here"
return render_template('index.html', logger=logger)
Это html-файл:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function(){
window.setInterval(funtion(),{
loadNewLogger()
}, 100)
function loadNewLogger(){
$.ajax({
url:"/",
type: "POST",
datatype: "text",
success: function(data){
$(update_logger).replaceWith(data)
}
});
}
});
</script>
<body>
<div style="color:rgb(0, 0, 0);text-align:center">
NAME </div>
{{ dropzone.create(action='upload') }}
{{ dropzone.load_js() }}
{{ dropzone.config() }}
<div id="update_logger">
{{ logger }}
</div>
Проблема в том, что ничего не происходит. HTML — сайт показывает «Нет», когда он должен напечатать «что-то здесь» после загрузки файла.
Что не так с этим кодом?
Комментарии:
1. Вы проверили, что у
data
него есть ?2. нет, как я могу это проверить?
3. если вам нужен быстрый ответ на этот вопрос, используйте console.log(данные) или попробуйте установить точку останова в отладчике браузера. например, для chome: developer.chrome.com/docs/devtools/javascript
Ответ №1:
Проблема в том, что по умолчанию ваш маршрут принимает GET
запрос. Поэтому всякий раз, когда вы делаете get, он запускается напрямую return render_template('index.html', logger=logger)
; но на этот раз вы видите, что у него нет доступа к линии logger = "something here"
. Это означает, что строка никогда не выполняется при наличии GET
запроса, следовательно, значение logger
остается None
. Что вы могли бы сделать, так это добавить return logger
logger = None
@app.route('/',methods=['POST','GET'])
def upload():
if request.method == 'POST':
f = request.files.get('file')
f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
es.main()
global logger
logger = "something here"
return logger
return render_template('index.html', logger=logger)
Убедитесь, что вы импортируете url_for()
— from flask import url_for
Комментарии:
1. С вашим решением ничего не происходит. Никто не остается, Никто
2. Тогда вы можете вернуть регистратор. После
logger = "Something here"
тогоreturn logger
, как вы это сделаете, ajax возьмет его и обновит им div. Дайте мне знать, если это сработает; Я также обновил «решение».3. Я работаю сейчас, когда перезагружаю страницу, но не после удаления файлов