If it can't then are there any other alternatives (either Django's native pagination or an alternate package) that allows multiple paginations per page?
I would like to display a list of about 5 objects with each object having its own pagination context.
For convenience, here is the documentation for django-pagination.
Note that you can give Paginator a list/tuple, a Django QuerySet , or any other object with a count() or __len__() method. When determining the number of objects contained in the passed object, Paginator will first try calling count() , then fallback to using len() if the passed object has no count() method.
Additionally, switching to keyset pagination will improve the performance of page lookups and make them work in constant time. Django makes it easy to alter its default configuration, giving you the power to build a performant solution for pagination in Django.
Django provides a few classes that help you manage paginated data – that is, data that's split across several pages, with “Previous/Next” links. These classes live in django/core/paginator.py. For examples, see the Pagination topic guide.
I know this post is old, but it is still relevant. The following will work for Django 1.9.
This is how to do it,
views.py
def myview():
Model_one = Model.objects.all()
paginator = Paginator(Model_one, 6)
page = request.GET.get('page1')
try:
Model_one = paginator.page(page)
except PageNotAnInteger:
Model_one = paginator.page(1)
except EmptyPage:
Model_one = paginator.page(paginator.num_pages)
Model_two = Model_other.objects.all()
paginator = Paginator(Model_two, 6)
page = request.GET.get('page2')
try:
Model_two = paginator.page(page)
except PageNotAnInteger:
Model_two = paginator.page(1)
except EmptyPage:
Model_two = paginator.page(paginator.num_pages)
context = {'Model_one': Model_one, 'Model_two': Model_two}
return render(request, 'template.html', context)
The important thing above is the 'page1' and 'page2'.
In the template,
{% if model_one %}
<div class="col-md-12 well">
{% for item in model_one %}
..... iterates through model_one.....
{% endfor %}
<span class="step-links pagination">
{% if model_one.has_previous %}
<a href="?page1={{ model_one.previous_page_number }}"> previous </a>
{% endif %}
<span class="current">
Page {{ model_one.number }} of {{ model_one.paginator.num_pages }}
</span>
{% if model_one.has_next %}
<a href="?page1={{ model_one.next_page_number }}"> next </a>
{% endif %}
</span>
</div>
{% endif %}
{% if model_two %}
<div class="col-md-12 well">
{% for item in model_two %}
..... iterates through model_two.....
{% endfor %}
<span class="step-links pagination">
{% if model_two.has_previous %}
<a href="?page2={{ model_two.previous_page_number }}"> previous </a>
{% endif %}
<span class="current">
Page {{ model_two.number }} of {{ model_two.paginator.num_pages }}
</span>
{% if model_two.has_next %}
<a href="?page2={{ model_two.next_page_number }}"> next </a>
{% endif %}
</span>
</div>
{% endif %}
Again using 'page1' and 'page2' to distinguish the pagination for each model.
Sure, it is possible. I can't speak for the django-pagination package, but it definitely is possible using the default Django's Paginator
class. You can create as many of them as you want inside your view. Just choose different GET parameters to specify the page for each of them and you're good to go.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With