@@ -43,22 +43,37 @@ def get_count_and_total_count(self, queryset, view):
43
43
44
44
45
45
class DatatablesPageNumberPagination (DatatablesMixin , PageNumberPagination ):
46
+ page_query_param = 'start'
47
+ page_size_query_param = 'length'
48
+
49
+ def get_page_size (self , request ):
50
+ if self .page_size_query_param :
51
+ try :
52
+ size = int (get_param (request , self .page_size_query_param ))
53
+ if size <= 0 :
54
+ raise ValueError ()
55
+ if self .max_page_size :
56
+ return min (size , self .max_page_size )
57
+ return size
58
+ except ValueError :
59
+ pass
60
+ return self .page_size
61
+
46
62
def paginate_queryset (self , queryset , request , view = None ):
47
63
if request .accepted_renderer .format != 'datatables' :
48
64
self .is_datatable_request = False
49
65
return super (
50
66
DatatablesPageNumberPagination , self
51
67
).paginate_queryset (queryset , request , view )
52
68
53
- length = get_param (request , 'length' )
69
+ length = get_param (request , self . page_size_query_param )
54
70
55
71
if length is None or length == '-1' :
56
72
return None
57
73
self .count , self .total_count = self .get_count_and_total_count (
58
74
queryset , view
59
75
)
60
76
self .is_datatable_request = True
61
- self .page_size_query_param = 'length'
62
77
page_size = self .get_page_size (request )
63
78
if not page_size : # pragma: no cover
64
79
return None
@@ -73,7 +88,7 @@ def count(self):
73
88
return self .value
74
89
75
90
paginator = CachedCountPaginator (self .count , queryset , page_size )
76
- start = int (get_param (request , 'start' , 0 ))
91
+ start = int (get_param (request , self . page_query_param , 0 ))
77
92
page_number = int (start / page_size ) + 1
78
93
79
94
try :
@@ -88,6 +103,9 @@ def count(self):
88
103
89
104
90
105
class DatatablesLimitOffsetPagination (DatatablesMixin , LimitOffsetPagination ):
106
+ limit_query_param = 'length'
107
+ offset_query_param = 'start'
108
+
91
109
def get_limit (self , request ):
92
110
try :
93
111
limit_value = int (get_param (request , self .limit_query_param ))
@@ -113,10 +131,8 @@ def get_offset(self, request):
113
131
def paginate_queryset (self , queryset , request , view = None ):
114
132
if request .accepted_renderer .format == 'datatables' :
115
133
self .is_datatable_request = True
116
- if get_param (request , 'length' ) is None :
134
+ if get_param (request , self . limit_query_param ) is None :
117
135
return None
118
- self .limit_query_param = 'length'
119
- self .offset_query_param = 'start'
120
136
self .count , self .total_count = self .get_count_and_total_count (
121
137
queryset , view
122
138
)
0 commit comments