diff --git a/netbox/utilities/paginator.py b/netbox/utilities/paginator.py index cf91df3ca..d6e0ad10c 100644 --- a/netbox/utilities/paginator.py +++ b/netbox/utilities/paginator.py @@ -37,3 +37,22 @@ class EnhancedPage(Page): page_list.insert(page_list.index(i), False) return page_list + + +def get_paginate_count(request): + """ + Determine the length of a page, using the following in order: + + 1. per_page URL query parameter + 2. Saved user preference + 3. PAGINATE_COUNT global setting. + """ + if 'per_page' in request.GET: + try: + per_page = int(request.GET.get('per_page')) + request.user.config.set('paginate_count', per_page, commit=True) + return per_page + except ValueError: + pass + + return request.user.config.get('paginate_count', settings.PAGINATE_COUNT) diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index b671eec9c..294acb1d1 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -2,7 +2,6 @@ import logging import sys from copy import deepcopy -from django.conf import settings from django.contrib import messages from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldDoesNotExist, ValidationError @@ -29,7 +28,7 @@ from utilities.forms import BootstrapMixin, CSVDataField from utilities.utils import csv_format, prepare_cloned_fields from .error_handlers import handle_protectederror from .forms import ConfirmationForm, ImportForm -from .paginator import EnhancedPaginator +from .paginator import EnhancedPaginator, get_paginate_count class GetReturnURLMixin(object): @@ -172,7 +171,7 @@ class ObjectListView(View): # Apply the request context paginate = { 'paginator_class': EnhancedPaginator, - 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT) + 'per_page': get_paginate_count(request) } RequestConfig(request, paginate).configure(table)