Как добавить пагинатор к таблице в Django
У меня есть таблица с содержимым и надо добавить к ней пагинацию в файлы: views.py, и шаблон самой таблицы. Уже заискался в интернете и так ничего толкового не нашел, как и на ютубе. Помогите пожалуйста.
def geting_posts(request):
get_posts = Post.objects.all()
return render(request, 'blog/db_table.html', {'get_posts':get_posts})
Это код без добавления пагинатора. А это шаблон:
<div class = 'features' id = 'content'>
<!-- {% block content %} -->
<table style = 'border: 1px solid #000;'>
<tr>
<th style = "border: 1px solid #000;">ID of Post</th>
<th style = 'border: 1px solid #000;'>Title of Post</th>
<th style = "border: 1px solid #000;">Text of Post</th>
<th style = "border: 1px solid #000;">Updating</th>
<th style = "border: 1px solid #000;">Deleting</th>
</tr>
{% for post in get_posts %}
<tr style = 'border: 1px solid #000;'>
<td>{{post.id}}</td>
<td>
<a href="{% url 'post_details' post.id %}">
{{post.title}}
</a>
</td>
<td>{{post.description}}</td>
<td>
<a href="{% url 'update_post' post.id %}">
Редактировать
</a>
</td>
<td>
<a href="{% url 'delete_post' post.id %}">
Удалить
</a>
</td>
</tr>
{% endfor %}
</table>
<a href="{% url 'create_posts' %}">
<button>
Создать пост
</button>
</a>
</div>
Ответы (1 шт):
Автор решения: Миша
→ Ссылка
Вы можете использовать класс ListView из django.views.generic и там указать свойство paginate_by(сколько записей будет на одной странице),но если не хотите использовать класс, то для функции это можно сделать так:
from django.core.paginator import *
def fucntion(request):
contact_list = Contact.objects.all() #список для пагинации
paginator = Paginator(contact_list, 25) # сколько записей на 1 странице
page_number = request.GET.get('page') #GET параметр page
page_obj = paginator.get_page(page_number)
return render(request, 'list.html', {'page_obj': page_obj})
А в шаблоне все будет одинаково, так и для класса, так и для функции:
<nav aria-label="Page navigation example">
<ul style="" class="pagination justify-content-center">
{% if page_obj.has_previous %}
<li class="page-item"><a class="page-link" href="?page={{page_obj.previous_page_number }}">Пред</a></li>
{% endif %}
{% for page in page_obj.paginator.page_range %}
{% if page == page_obj.number %}
<li class="page-item active"><a class="page-link" href="?page={{page}}">{{page}}</a></li>
{% elif page > page_obj.number|add:-3 and page < page_obj.number|add:3 %}
<li class="page-item"><a class="page-link" href="?page={{page}}">{{page}}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item"><a class="page-link" href="?page={{page_obj.next_page_number}}">След</a></li>
{% endif %}
</ul>
</nav>