summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Wilson Jr <gary.wilson@gmail.com>2008-07-02 04:31:28 +0000
committerGary Wilson Jr <gary.wilson@gmail.com>2008-07-02 04:31:28 +0000
commit54d50ef5c890242a8516346ea9ab97092c3fa8c1 (patch)
tree7e89e37294e4c844d5c7185371f41cf9a0039124
parentbcb1c6dc7167039e715b3399bcc46cbeb5f2d8d1 (diff)
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
-rw-r--r--django/core/paginator.py5
-rw-r--r--tests/modeltests/pagination/models.py23
2 files changed, 27 insertions, 1 deletions
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 #
##################