Просмотр исходного кода

Remember user's per_page preference (POC for UserConfig)

Jeremy Stretch 5 лет назад
Родитель
Сommit
30c3d6ee40
2 измененных файлов с 21 добавлено и 3 удалено
  1. 19 0
      netbox/utilities/paginator.py
  2. 2 3
      netbox/utilities/views.py

+ 19 - 0
netbox/utilities/paginator.py

@@ -37,3 +37,22 @@ class EnhancedPage(Page):
             page_list.insert(page_list.index(i), False)
             page_list.insert(page_list.index(i), False)
 
 
         return page_list
         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)

+ 2 - 3
netbox/utilities/views.py

@@ -2,7 +2,6 @@ import logging
 import sys
 import sys
 from copy import deepcopy
 from copy import deepcopy
 
 
-from django.conf import settings
 from django.contrib import messages
 from django.contrib import messages
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import FieldDoesNotExist, ValidationError
 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 utilities.utils import csv_format, prepare_cloned_fields
 from .error_handlers import handle_protectederror
 from .error_handlers import handle_protectederror
 from .forms import ConfirmationForm, ImportForm
 from .forms import ConfirmationForm, ImportForm
-from .paginator import EnhancedPaginator
+from .paginator import EnhancedPaginator, get_paginate_count
 
 
 
 
 class GetReturnURLMixin(object):
 class GetReturnURLMixin(object):
@@ -172,7 +171,7 @@ class ObjectListView(View):
         # Apply the request context
         # Apply the request context
         paginate = {
         paginate = {
             'paginator_class': EnhancedPaginator,
             'paginator_class': EnhancedPaginator,
-            'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT)
+            'per_page': get_paginate_count(request)
         }
         }
         RequestConfig(request, paginate).configure(table)
         RequestConfig(request, paginate).configure(table)