@@ -322,7 +322,10 @@ class ExamplePagination(pagination.LimitOffsetPagination):
322
322
self .queryset = range (1 , 101 )
323
323
324
324
def paginate_queryset (self , request ):
325
- return list (self .pagination .paginate_queryset (self .queryset , request ))
325
+ queryset = self .pagination .paginate_queryset (self .queryset , request )
326
+ if queryset is None :
327
+ return None
328
+ return list (queryset )
326
329
327
330
def get_paginated_content (self , queryset ):
328
331
response = self .pagination .get_paginated_response (queryset )
@@ -505,6 +508,52 @@ def test_max_limit(self):
505
508
assert content .get ('next' ) == next_url
506
509
assert content .get ('previous' ) == prev_url
507
510
511
+ def test_limit_is_zero (self ):
512
+ """
513
+ A limit of zero should set limit to max_limit.
514
+ """
515
+ offset = 20
516
+ request = Request (factory .get ('/' , {'limit' : 0 , 'offset' : offset }))
517
+ queryset = self .paginate_queryset (request )
518
+ content = self .get_paginated_content (queryset )
519
+ context = self .get_html_context ()
520
+ assert queryset == self .queryset [20 :35 ]
521
+ assert content == {
522
+ 'results' : self .queryset [20 :35 ],
523
+ 'previous' : 'http://testserver/?limit=15&offset=5' ,
524
+ 'next' : 'http://testserver/?limit=15&offset=35' ,
525
+ 'count' : 100
526
+ }
527
+ assert context == {
528
+ 'previous_url' : 'http://testserver/?limit=15&offset=5' ,
529
+ 'next_url' : 'http://testserver/?limit=15&offset=35' ,
530
+ 'page_links' : [
531
+ PageLink ('http://testserver/?limit=15' , 1 , False , False ),
532
+ PageLink ('http://testserver/?limit=15&offset=5' , 2 , False , False ),
533
+ PageLink ('http://testserver/?limit=15&offset=20' , 3 , True , False ),
534
+ PageLink ('http://testserver/?limit=15&offset=35' , 4 , False , False ),
535
+ PAGE_BREAK ,
536
+ PageLink ('http://testserver/?limit=15&offset=95' , 8 , False , False ),
537
+ ]
538
+ }
539
+
540
+ def test_limit_is_zero_with_no_limit (self ):
541
+ """
542
+ A limit of zero should set limit to max_limit, but when it is None,
543
+ pagination should be disabled and whole queryset returned.
544
+ """
545
+ self .pagination .max_limit = None
546
+ offset = 30
547
+ request = Request (factory .get ('/' , {'limit' : 0 , 'offset' : offset }))
548
+ queryset = self .paginate_queryset (request )
549
+ context = self .get_html_context ()
550
+ assert queryset is None
551
+ assert context == {
552
+ 'previous_url' : None ,
553
+ 'next_url' : None ,
554
+ 'page_links' : []
555
+ }
556
+
508
557
509
558
class TestCursorPagination :
510
559
"""
0 commit comments