Просто пример реализации пагинации в Django.
В urls.py настраиваем маршрут.
|
1 2 3 4 5 |
urlpatterns=[ ... path(‘projects/’,views.project_list,name=‘projects’), ... ] |
В файле views.py создаем метод project_list.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def project_list(request): queryset=Project.objects.all().order_by(‘-id’) paginator=Paginator(queryset,10) page_number=request.GET.get(‘page’) page_obj=paginator.get_page(page_number) data={ ‘title’:‘Project’, ‘paginator’:paginator, ‘page_number’:page_number, ‘page_obj’:page_obj, } returnrender(request,‘project_list.html’,data) |
В папке templates создаем шаблон списка project_list.html и шаблон пагинации pagination.html
project_list.html:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
{%extends«base.html»%} {%block content%} <div class=«container pb-5»> <div class=«mb-4 d-flex justify-content-between align-items-center»> <h4 class=«mb-4»> Projects </h4> <ahref=«/project/new/»class=«btn btn-outline-success»> Add New </a> </div> <table class=«table»> <thead class=«bg-secondary»> <tr> <th scope=«col»>Server</th> <th scope=«col»>Action</th> </tr> </thead> <tbody> {%forproject inpage_obj%} <tr> <td class=«align-middle»>{{project.name}}</td> <td class=«align-middle»> <ahref=«/project/{{ project.id }}/»class=«btn btn-outline-success»> Actions </a> <ahref=«/project/edit/{{ project.id }}/»class=«btn btn-outline-success»> Edit </a> </td> </tr> {%endfor%} </tbody> </table> {%include«pagination.html» %} </div> {%endblock%} |
pagination.html:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{%ifpage_obj.has_previous orpage_obj.has_next%} <nav class=«mt-4»> <ul class=«pagination»> <li class=«page-item mr-1»> <aclass=«btn btn-outline-success»href=«?page=1»>First</a> </li> {%ifpage_obj.has_previous%} <li class=«page-item mr-1»> <aclass=«btn btn-outline-success»href=«?page={{ page_obj.previous_page_number }}»>Previous</a> </li> {%endif%} {%foriinpage_obj.paginator.page_range%} {%ifi==page_obj.number%} <li class=«page-item mr-1»> <aclass=«btn btn-success»href=«?page={{ i }}»>{{i}}</a> </li> {%elifi>page_obj.number|add:‘-4’andi<page_obj.number|add:‘4’%} <li class=«page-item mr-1»> <aclass=«btn btn-outline-success»href=«?page={{ i }}»>{{i}}</a> </li> {%endif%} {%endfor%} {%ifpage_obj.has_next%} <li class=«page-item mr-1»> <aclass=«btn btn-outline-success»href=«?page={{ page_obj.next_page_number }}»>Next</a> </li> {%endif%} <li class=«page-item mr-1»> <aclass=«btn btn-outline-success»href=«?page={{ page_obj.paginator.num_pages }}»>Last</a> </li> </ul> </nav> {%endif%} |