Я знаю, что вы сказали, что не хотите использовать Django Paginator
для этого, однако, если причина в том, что вы не потрудились понять это, я предлагаю попробовать еще раз, так как сценарий, который вы описываете, классическое использование класса Paginator
.
Из документации pagination
, проверить этот пример:
Определите функцию вида:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
def listing(request):
article_list = Articles.objects.all()
paginator = Paginator(article_list, 3) # Show 3 articles per page
page = request.GET.get('page')
try:
articles = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
articles = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
articles = paginator.page(paginator.num_pages)
return render(request, 'list.html', {'articles': articles})
И в HTML форму:
{% for article in articles %}
{# Each "article" is a Article model object. #}
{{ article.full_name|upper }}<br />
...
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if articles.has_previous %}
<a href="?page={{ articles.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ articles.number }} of {{ articles.paginator.num_pages }}.
</span>
{% if articles.has_next %}
<a href="?page={{ articles.next_page_number }}">next</a>
{% endif %}
</span>
</div>
Почему Paginator Джанго не подходит? – Alasdair
Его подходящий, однако, пытаясь сделать это так долго, прежде чем обнаруживать paginator, я думаю, что любопытство стало лучше меня, и Im задается вопросом, возможно ли это даже с объектными менеджерами. – JBT
Еще проще было бы использовать ['ListView'] (https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-display/#listview), тогда вы полностью видите код (включая разбивку на страницы) будет составлять около 5 строк (минимум) – Sayse