Как создать гиперссылку в совпадающих результатах в Django search autocomplete trevoreyre
Я использую autocomplete trevoreyre для обработки функции автозаполнения в строке поиска.
На данный момент пользователь перенаправляется на страницу search_result при нажатии на enter или иконку поиска. Проблема в том, что даже если появляется предложение, пользователь должен нажать на заголовок, затем нажать enter или иконку поиска, тогда функция перенаправит его на страницу search_results, и тогда пользователь сможет нажать на интересующую его карточку.
Я хотел бы расширить эту функцию и создать гиперссылку в предложениях заголовков, чтобы если пользователь нажимает на предложение заголовка, то функция должна перенаправлять пользователя непосредственно на страницу DetailedView.
Я знаю, что должен следовать этой логике:
onSubmit: result => {
window.open(`${wikiUrl}/wiki/${
encodeURI(result.title)
}`)
}
но я не уверен, как создать ссылку на страницы DetailView, если в моем Django приложении есть 3 модели и эти модели имеют разные URL. Я хочу добавить что-то вроде события onclick, чтобы, когда пользователь нажимает на предложение, он перенаправлялся на страницу DetailView, но если нажимает на enter или иконку поиска, он перенаправляется на страницу search_result.
base.html
<button onclick="openSearch()"><i class="fas fa-search fa-sm"></i></button>
<form action="{% url 'search_result' %}" method="get" id="search">
{% csrf_token %}
<div class="searchbar" id="autocomplete">
<input name="q" type="text" placeholder="Search..." class="search_input">
<button class="search_icon"><i class="fas fa-search fa-sm"></i></button>
<ul class="autocomplete-result-list"></ul>
</div>
</form>
autocomplete.js
new Autocomplete('#autocomplete', {
search: input => {
const url = `/search/?title=${input}`
return new Promise(resolve => {
if (input.length < 3) {
return resolve([])
}
fetch(url)
.then(response => response.json())
.then(data => {
resolve(data.data)
})
})
},
onSubmit: result => {
console.log(result)
}
})
views.py
def search_autocomplete(request):
query = request.GET.get('title')
search_list = []
if query:
testone_list= TestOne.objects.search_one(query=query).order_by('-publish')
testtwo_list = TestTwo.objects.search_one(query=query).order_by('-publish')
testthree_list = TestThree.objects.search_one(query=query).order_by('-publish')
search_list = map(lambda x: x.title, chain(testone_list, testtwo_list, testthree_list))
return JsonResponse({'status':200, 'data': list(search_list)})
urls.py
urlpatterns = [
path('testone/<slug:slug>', views.TestOneDetailViewFBV, name='testone'),
path('testtwo/<slug:slug>', views.TestTwoDetailViewFBV, name='testtwo'),
path('testthree/<slug:slug>', views.TestThreeDetailViewFBV, name='testthree'),
path('search/', views.search_autocomplete),
path('search_results/', views.SearchViewFBV, name='search_result'),
]