Задача
Я пытаюсь отобразить файлы изображений с помощью AJAX во Flask. В частности, я хочу отобразить изображение после нажатия кнопки и отобразить следующее изображение после повторного нажатия кнопки (например, слайд-шоу). Имена файлов изображений хранятся в моей базе данных. Я запрашиваю базу данных, чтобы получить список имен файлов для текущего пользователя и объединить каждое имя файла с остальной частью пути (путь к месту хранения изображений на диске), чтобы отобразить изображение.
Пока мне удается получить первое изображение текущего пользователя. Тем не менее, я не могу найти способ отслеживать, какое изображение будет показано следующим.
Я попытался использовать глобальную переменную в качестве счетчика (file_counter
), который должен служить индексом. Я хочу увеличить file_counter на 1 каждый раз, когда делается ajax-запрос для получения следующего файла, но счетчик не увеличивается при последующих вызовах и не выдает ошибку.
Вопрос
Как мне нужно инициализировать глобальную переменную (file_counter), чтобы она сохраняла свое значение при нескольких вызовах? Кроме того, является ли использование глобальных переменных правильным способом сделать это?
HTML
<div id="ajax-field"></div>
<button class="btn btn-block" id="next-button"><p>Next Image!</p></button>
AJAX:
$('#next-button').click(function(){
$("#ajax-field").text("");
$.ajax({
url: "/get_data",
type: "POST",
success: function(resp){
$('#ajax-field').append(resp.data);
}
});
});
Маршрутизация:
global filenames
global file_count
@app.route("/get_data", methods=['POST'])
def get_data():
try: # Is intended to fail on the first run in order for the global variables to be initialized. However it keeps failing on subsequent runs
display_img = filenames[file_count]
file_count +=1
except:
filenames = []
# current_user.uploads returns all file-objects of the current user
user_uploads = current_user.uploads
for file in user_uploads:
# file.filename returns the respective filename of the image
filenames.append(file.filename)
#filenames is now a list of filenames i.e. ['a.jpg','b.jpg','c.jpg'...]
display_img = filenames[0]
file_count = 1
path = "image_uploads/4_files/"+display_img
return jsonify({'data': render_template('ajax_template.html', mylist = path)})
ajax_template.html:
<ul>
{% block content %}
<li>
<img id="selected-image-ajax" src="{{url_for('static',filename=mylist)}}" class="img-thumbnail" style="display:block; margin:auto;"></img>
</li>
{% endblock content %}
</ul>