diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index bcbb80e8b..864909878 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -1,6 +1,7 @@ from django_tables2 import RequestConfig import netaddr +from django.conf import settings from django.contrib.auth.decorators import permission_required from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib import messages @@ -295,7 +296,12 @@ def aggregate(request, pk): prefix_table = tables.PrefixTable(child_prefixes) if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'): prefix_table.base_columns['pk'].visible = True - RequestConfig(request, paginate={'klass': EnhancedPaginator}).configure(prefix_table) + + paginate = { + 'klass': EnhancedPaginator, + 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT) + } + RequestConfig(request, paginate).configure(prefix_table) # Compile permissions list for rendering the object table permissions = { @@ -427,7 +433,12 @@ def prefix(request, pk): child_prefix_table = tables.PrefixTable(child_prefixes) if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'): child_prefix_table.base_columns['pk'].visible = True - RequestConfig(request, paginate={'klass': EnhancedPaginator}).configure(child_prefix_table) + + paginate = { + 'klass': EnhancedPaginator, + 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT) + } + RequestConfig(request, paginate).configure(child_prefix_table) # Compile permissions list for rendering the object table permissions = { @@ -500,7 +511,12 @@ def prefix_ipaddresses(request, pk): ip_table = tables.IPAddressTable(ipaddresses) if request.user.has_perm('ipam.change_ipaddress') or request.user.has_perm('ipam.delete_ipaddress'): ip_table.base_columns['pk'].visible = True - RequestConfig(request, paginate={'klass': EnhancedPaginator}).configure(ip_table) + + paginate = { + 'klass': EnhancedPaginator, + 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT) + } + RequestConfig(request, paginate).configure(ip_table) # Compile permissions list for rendering the object table permissions = { diff --git a/netbox/utilities/paginator.py b/netbox/utilities/paginator.py index 2c0e2fb3d..ae915f773 100644 --- a/netbox/utilities/paginator.py +++ b/netbox/utilities/paginator.py @@ -5,7 +5,8 @@ from django.core.paginator import Paginator, Page class EnhancedPaginator(Paginator): def __init__(self, object_list, per_page, **kwargs): - per_page = getattr(settings, 'PAGINATE_COUNT', 50) + if not isinstance(per_page, int) or per_page < 1: + per_page = getattr(settings, 'PAGINATE_COUNT', 50) super(EnhancedPaginator, self).__init__(object_list, per_page, **kwargs) def _get_page(self, *args, **kwargs): diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index f38d9a0ab..08bf3f65a 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -1,6 +1,7 @@ from collections import OrderedDict from django_tables2 import RequestConfig +from django.conf import settings from django.contrib import messages from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError @@ -101,7 +102,13 @@ class ObjectListView(View): table = self.table(self.queryset) if 'pk' in table.base_columns and (permissions['change'] or permissions['delete']): table.base_columns['pk'].visible = True - RequestConfig(request, paginate={'klass': EnhancedPaginator}).configure(table) + + # Apply the request context + paginate = { + 'klass': EnhancedPaginator, + 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT) + } + RequestConfig(request, paginate).configure(table) context = { 'table': table,