Пагинация страниц

Когда необходимо постраничный вывод статей или другой информации из БД, а Django имеет это решение из коробки.

Viesw & Template

views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

@login_required
def nodes(request):
	if request.method == "GET":
		# Получаем какой то Queryset из БД
		article = Articles.objects.all() 
		# Пагинация	
		# Указываем колличесто записей на страницу
		paginator = Paginator(article, 15)
		# Получаем GET: ?page=number
		page = request.GET.get('page')
		
		try:
			pages = paginator.page(page)
		except PageNotAnInteger:
			# Если ?page=баракадабра, вернет первую страницу
			pages = paginator.page(1)
		except EmptyPage:
			# Если номер страныцы больше возможного значения, вернет последнюю страницу
			pages = paginator.page(paginator.num_pages)		
		data = {
				'pages': pages,
			}
		return render(request, 'admin_panel/node/nodes.html', data )

 

admin_panel/node/nodes.html

	{% for article in pages %}
	<!-- Кактой кто контент рендерим в цикле -->
	{% endfor %}

<!-- Сама пагинация -->
<nav>
	<ul class="pagination">
		{% if pages.has_previous %}
		<li class="page-item"><a class="page-link" href="?page={{ pages.previous_page_number}}">Сюда</a></li>
		{% endif %}

		{% for num in pages.paginator.page_range %}
		{% if num == pages.number %}
		<li class="page-item active"><a class="page-link" href="?page={{num}}">{{ num }}</a></li>
		{% else %}
		<li class="page-item"><a class="page-link" href="?page={{num}}">{{num}}</a></li>
		{% endif %} 
		{% endfor %}

		{% if pages.has_next %}
		<li class="page-item"><a class="page-link" href="?page={{pages.next_page_number}}">Туда</a></li>
		{% endif %}
	</ul>
</nav>

 

Ссылки

  1. https://toster.ru/q/315283

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *