Вот фрагменты кода. У меня есть форма, подобная этой
<form class="form-inline md-form form-sm my-0">
<input id="search_query" name="search_query" class="form-control form-control-sm mr-3 w-95"
type="text" placeholder="Search" aria-label="Search">
</form>
, и я хочу автоматически заполнить свой поисковый запрос с помощью flask представления:
@bp_main.route("/autocomplete", methods=["GET"])
def autocomplete():
query = request.args.get("q", type=str)
items = get_search_results(query=query)
results = [{"value": item.id, "label": item.name} for item in items]
return jsonify(matching_results=results)
Вот часть js:
$(document).ready(function {
$(function () {
$("#autocomplete").autocomplete({
source: function (request, response) {
$.getJSON("{{ url_for('main.autocomplete') }}", {
q: request.term, // in flask, "q" will be the argument to look for using request.args
}, function (data) {
response(data.matching_results); // matching_results from jsonify
});
},
minLength: 2,
select: function (event, ui) {
console.log(ui.item.value); // not in your question, but might help later
}
});
});
});
Пока я могу получить выпадающий список автозаполнения при поиске. Но я не мог понять, как отправить запрос на получение доступа к другому представлению и напрямую. Представление имеет только один именованный параметр, который должен быть именно тем, что форма ввода получает от щелчка пользователя. Таким образом, в основном пользователь нажимает item.label
, а затем приложение передает соответствующий item.id
этому представлению и отображает его. Точно так же, как любой поиск работает сегодня. Я понятия не имею, какие части мне не хватает.