Вам необходимо изменить маршруты следования / отмены подписки, чтобы вместо возврата объекта перенаправления с флягой они возвращали ответ на запрос AJAX. Вам также нужно изменить работу кнопок, чтобы они выполняли запрос AJAX, а не указывали на ссылку.
Давайте начнем с кнопок. Прямо сейчас это просто ссылки, вам нужно, чтобы они инициализировали фрагмент JavaScript, который содержит ваш AJAX-запрос, что означает изменение этого:
<a href="{{ url_for('.follow', tourist_attraction_name=tourist_attraction_name) }}"class="btn btn-primary">Add</a>
на что-то вроде этого:
<button id="follow" onclick="ajax_follow('{{tourist_attraction_name}}')">Add</button>
и добавление соответствующего скрипта следующим образом:
<script>
function ajax_follow(name) {
$.ajax({url: "/follow/" + name, success: function(result){
if (result == 'success') {
$("#follow").text("Remove");
$("#follow").attr("onclick", "ajax_unfollow('{{tourist_attraction_name}}')"
}
}});
}
</script>
Это выполнит ваш маршрут фляги '/ follow /' с tourist_attraction_name в качестве имени аттракциона и изменит содержание вашей кнопки без перезагрузки страницы. Обратите внимание, что для корректной работы ajax необходимо сначала импортировать jQuery. У вас все еще есть проблема с маршрутом фляги, поскольку он не возвращает «успех», а объект перенаправления фляги. Чтобы это исправить, измените:
return redirect(url_for('.place_detail', tourist_attraction_name=place.tourist_attraction_name)
до:
return "success", 200
Чтобы закончить, вы должны добавить обработку ошибок и сделать что-то подобное для отмены подписки. Я бы порекомендовал обрабатывать ошибки, возвращая неуспешный описательный текст ошибки, если ваша логика маршрута колбы выходит из строя, а затем используя javascript для предупреждения этого текста ошибки.