Да . A ListView
[Django -doc] может сделать это, поскольку разбиение на страницы выполняется по результату get_queryset
. Следовательно, вы можете реализовать это следующим образом:
from django.views.generic.list import ListView
from app.models import MyModel
class MyModelListView(ListView):
model = MyModel
<b>paginate_by = 10</b>
template_name = 'some_template.html'
def <b>get_queryset</b>(self, **kwargs):
qs = super().get_context_data(**kwargs)
return qs.filter(<b>some_field__icontains=self.request.GET.get('search', '')</b>)
Если вы выполняете и разбивку на страницы, и поиск, то в строке запроса есть два элемента, поэтому URL-адреса разбивки на страницы являются более громоздкими:
{% for object in object_list %}
{{ object }}
{% endfor %}
{% if page_obj.has_previous %}
<a href="<b>?search={{ request.GET.search|urlencode }}&</b>page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
{% if page_obj.has_next %}
<a href="<b>?search={{ request.GET.search|urlencode }}&</b>page={{ page_obj.previous_page_number }}">Next</a>
{% endif %}