Django Pagination: Flexible Anzahl je Seite
Verfasst: Donnerstag 5. September 2019, 19:14
Guten Abend,
ich habe mit Paginator eine Bootstrap Pagination erstellt, die soweit auch gut funktioniert (vgl. Screenshot https://ibb.co/kxfb88T). Allerdings würde ich gerne die Anzahl der angezeigten Datensätze (z. B. 10, 25, 50, 100) durch ein Selector-Feld variabel einstellen (vgl. obigen Screenshot). Ich habe auch schon bei stackoverflow einen Lösungsansatz (https://stackoverflow.com/questions/172 ... er-1730267) gefunden, der wie folgt aussieht:
Allerdings komme ich nicht damit klar, wie ich diesen in die views.py und index.html implementieren soll (liegt auch daran, dass ich den dort empfohlenen Request "per_page = int(request.REQUEST['p'])" nicht verstehe. Was auch noch ein Problem darstellt ist, dass sich der ausgewählte Wert im Selektor-Feld auf die Standardauswahl ändert, sobald man die Seite z. B. von Seite 2 auf 3 wechselt.
Könnt ihr mir hier vielleicht helfen wie genau ich meinen Code in der views.py bzw. index.html anpassen muss? Habt vielen Dank für eine Antwort.
Mein derzeitiger Code sieht wie folgt aus:
ich habe mit Paginator eine Bootstrap Pagination erstellt, die soweit auch gut funktioniert (vgl. Screenshot https://ibb.co/kxfb88T). Allerdings würde ich gerne die Anzahl der angezeigten Datensätze (z. B. 10, 25, 50, 100) durch ein Selector-Feld variabel einstellen (vgl. obigen Screenshot). Ich habe auch schon bei stackoverflow einen Lösungsansatz (https://stackoverflow.com/questions/172 ... er-1730267) gefunden, der wie folgt aussieht:
Code: Alles auswählen
# Assuming you're reading the Query String value ?p=
try:
per_page = int(request.REQUEST['p'])
except:
per_page = 25 # default value
paginator = Paginator(objects, per_page)
Könnt ihr mir hier vielleicht helfen wie genau ich meinen Code in der views.py bzw. index.html anpassen muss? Habt vielen Dank für eine Antwort.
Mein derzeitiger Code sieht wie folgt aus:
Code: Alles auswählen
views.py
...
def index(request):
webpages = Webpage.objects.order_by('-id')
paginator = Paginator(webpages, 5)
page = request.GET.get('page')
paged_webpages = paginator.get_page(page)
return render(request, 'first_app/index.html', {'webpages': paged_webpages})
Code: Alles auswählen
urls.py
...
urlpatterns = [
path('', views.index, name='index'),
]
Code: Alles auswählen
index.html:
...
<!-- Paginator -->
<div class="row">
<div class="col-md-12">
{% if webpages.has_other_pages %}
<ul class="pagination">
{% if webpages.has_previous %}
<li class="page-item">
<a href="?page={{ webpages.previous_page_number }}" class="page-link">«</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link">«</a>
</li>
{% endif %}
{% for i in webpages.paginator.page_range %}
{% if webpages.number == i %}
<li class="page-item active">
<a class="page-link">{{ i }}</a>
</li>
{% else %}
<li class="page-item">
<a href="?page={{ i }}" class="page-link">{{ i }}</a>
</li>
{% endif %}
{% endfor %}
{% if webpages.has_next %}
<li class="page-item">
<a href="?page={{ webpages.next_page_number }}" class="page-link">»</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link">»</a>
</li>
{% endif %}
</ul>
{% endif %}
</div>
</div>
<select class="custom-select" id="selector">
<option selected>Choose items per page</option>
<option value="1">10</option>
<option value="2">25</option>
<option value="3">50</option>
</select>