Import:
from django.core.paginator import Paginator
Selected view:
... if 'reset' in request.GET: request.session.pop('current_sort', None) return redirect('species-selected', pk=pk) current_sort = request.session.get("current_sort") or "fossil_name" if "ordering" in request.GET: ordering = request.GET["ordering"] if ordering == current_sort: ordering = "-" + ordering request.session["current_sort"] = ordering else: ordering = current_sort fossils_in_species = DBFossil.objects.filter(fossil_species=specie).order_by(ordering) paginator = Paginator(fossils_in_species, 5) page = request.GET.get('page') fossils = paginator.get_page(page) # add ordering to the context: return render(request, 'app_fossils/species.html', { ... 'ordering': ordering, ... })
Add sorting links to the table thead
🖼️ {% if ordering == 'fossil_image_resized' %}▲ {% elif ordering == '-fossil_image_resized' %}▼ {% else %}⇅ {% endif %} Fossil {% if ordering == 'fossil_name' %}▲ {% elif ordering == '-fossil_name' %}▼ {% else %}⇅ {% endif %} Age {% if ordering == 'fossil_age_in_years' %}▲ {% elif ordering == '-fossil_age_in_years' %}▼ {% else %}⇅ {% endif %} Condition {% if ordering == 'fossil_condition' %}▲ {% elif ordering == '-fossil_condition' %}▼ {% else %}⇅ {% endif %} Value {% if ordering == 'fossil_value' %}▲ {% elif ordering == '-fossil_value' %}▼ {% else %}⇅ {% endif %}
Add navigation:
{% if species.has_previous %} << < {% else %} << < {% endif %} {{ species.number }} / {{ species.paginator.num_pages }} {% for page_num in species.paginator.page_range %} {% if page_num == species.number %} {{ page_num }} {% else %} {{ page_num }} {% endif %} {% endfor %} {% if species.has_next %} > >> {% else %} > >> {% endif %}
Add button to reset sorting
{% if ordering != 'fossil_name' %} Reset sorting {% endif %}