diff --git a/django/core/paginator.py b/django/core/paginator.py index 04cc4bf481..5fc6c80812 100644 --- a/django/core/paginator.py +++ b/django/core/paginator.py @@ -173,7 +173,10 @@ class ObjectPaginator(Paginator): if self._count is None: try: self._count = self.object_list.count() - except TypeError: + except (AttributeError, TypeError): + # AttributeError if object_list has no count() method. + # TypeError if object_list.count() requires arguments + # (i.e. is of type list). self._count = len(self.object_list) return self._count count = property(_get_count) diff --git a/tests/modeltests/pagination/models.py b/tests/modeltests/pagination/models.py index 277c5961e3..1f08a32903 100644 --- a/tests/modeltests/pagination/models.py +++ b/tests/modeltests/pagination/models.py @@ -200,6 +200,29 @@ InvalidPage: ... >>> paginator.page_range [1] +# ObjectPaginator can be passed lists too. +>>> paginator = ObjectPaginator([1, 2, 3], 5) +>>> paginator.hits +3 +>>> paginator.pages +1 +>>> paginator.page_range +[1] + + +# ObjectPaginator can be passed other objects with a count() method. +>>> class Container: +... def __len__(self): +... return 42 +>>> paginator = ObjectPaginator(Container(), 10) +>>> paginator.hits +42 +>>> paginator.pages +5 +>>> paginator.page_range +[1, 2, 3, 4, 5] + + ################## # Orphan support # ##################