Я разрабатываю приложение в Django.
У меня есть шаблон, в котором отображаются данные из моей модели.
Шаблон имеет панель поиска, а также paginator.
Проблема в том, что когда я запускаю запрос (скажем, я ищу слово "home"),
показывает отфильтрованные результаты для первой страницы, но когда я нажимаю на свой пагинатор, чтобы перейти к следующемустраница,
запрос сбрасывается, и я получаю страницу 2 нефильтрованных данных (полные данные).
Итак, как я могу объединить фильтрацию результатов по панели поиска и paginator?
Вот мой штрих-код для поиска:
<form method="GET" action="{% url 'glossario' %}">
<input id="testo_slot_ricerca_semplice" type="text" placeholder="Ricerca terminologia..." name="q" value="{{request.GET.q}}">
<!-- #cerca -->
<button id="search_button" type="submit"><i class="fa fa-search"></i></button>
<!-- cancella query -->
<button id="cancel_search_button" type="submit" onclick="Delete_simple_search()"><i class="fa fa-trash"></i></button>
</form>
Вот мой код для разбивки на страницы:
<nav aria-label="...">
<ul class="pagination">
{% if all_entries.has_previous %}
<li class="page-item">
<a class="page-link" href="?page=1">« first</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ all_entries.previous_page_number }}">{{ all_entries.previous_page_number }}</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" class="page-item disabled">« first</a>
</li>
<!-- <li class="page-item disabled"></li>
<a class="page-link" href="#" class="page-item disabled">previous</a>
</li> -->
{% endif %}
<li class="page-item active">
<a class="page-link" href="#">{{ all_entries.number }}<span class="sr-only">(current)</span></a>
</li>
{% if all_entries.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ all_entries.next_page_number }}">{{ all_entries.next_page_number }}</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ all_entries.paginator.num_pages }}">Last [ {{ all_entries.paginator.num_pages }} ] »</a>
</li>
{% else %}
<!-- <li class="page-item disabled"></li>
<a class="page-link" href="#" class="page-item disabled">next</a>
</li> -->
<li class="page-item disabled">
<a class="page-link" href="#" class="page-item disabled">Last [ {{ all_entries.paginator.num_pages }} ] »</a>
</li>
{% endif %}
</ul>
</nav>
А вот моя функция в views.py при заполнении шаблона:
def glossario(request):
query = request.GET.get('q')
template = "glossario.html"
all_entries = glossary_entry.objects.all()
if query:
query = request.GET.get('q')
selected_entries = glossary_entry.objects.filter(Q(Acronimo__icontains=query)|Q(Ambito_riferimento__icontains=query)|Q(Autore_definizione__icontains=query))
# Pagination
paginator = Paginator(selected_entries, 10) # Show 25 contacts per page
page = request.GET.get('page')
selected_entries = paginator.get_page(page)
return render(request, template, {'all_entries':selected_entries})
# se non è stata fatta nessuna query
else:
# Pagination
paginator = Paginator(all_entries, 10)
page = request.GET.get('page')
all_entries = paginator.get_page(page)
return render(request, template, {'all_entries':all_entries})