【发布时间】:2020-02-19 23:52:36
【问题描述】:
我正在用 Django 开发一个应用程序。
我有一个模板,其中显示了我的模型中的数据。
模板有一个搜索栏和一个分页器。
问题是,当我运行查询时(假设我搜索“家”这个词),
它显示了第一页的过滤结果,但是当我单击分页器进入下一页时,
查询被重置,我得到未过滤数据(整个数据)的第 2 页。
那么,如何结合搜索栏和分页器对结果的过滤呢?
这是我的搜索条形码:
<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})
【问题讨论】:
标签: django django-templates django-views filtering paginator