Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Made legacy `ObjectPaginator` truly backwards-compatible by catching …

…both `AttributeError` and `TypeError` in `_get_count` as it did before

[7306].  Tests included.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7819 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 54d50ef5c890242a8516346ea9ab97092c3fa8c1 1 parent bcb1c6d
Gary Wilson Jr. gdub authored
Showing with 27 additions and 1 deletion.
  1. +4 −1 django/core/paginator.py
  2. +23 −0 tests/modeltests/pagination/models.py
5 django/core/paginator.py
View
@@ -173,7 +173,10 @@ def _get_count(self):
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)
23 tests/modeltests/pagination/models.py
View
@@ -200,6 +200,29 @@ def __unicode__(self):
>>> 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 #
##################
Please sign in to comment.
Something went wrong with that request. Please try again.