added columns.sortable() method
authorMichael Elsdoerfer <michael@elsdoerfer.info>
Sun, 29 Jun 2008 10:30:46 +0000 (12:30 +0200)
committerMichael Elsdoerfer <michael@elsdoerfer.info>
Sun, 29 Jun 2008 10:30:46 +0000 (12:30 +0200)
README
django_tables/tables.py
tests/test_basic.py

diff --git a/README b/README
index 485e87dbe24240cddb8d65d6b25b8f00d5fb519a..4467b37dff245dbe4d889ab41066f2e9733744bd 100644 (file)
--- a/README
+++ b/README
@@ -308,6 +308,20 @@ Note that how the default is used and when it is applied differs between
 static and ModelTables.\r
 \r
 \r
+The table.columns container\r
+---------------------------\r
+\r
+While you can iterate through ``columns`` and get all the currently visible\r
+columns, it further provides features that go beyond a simple iterator.\r
+\r
+You can access all columns, regardless of their visibility, through\r
+``columns.all``.\r
+\r
+``columns.sortable`` is a handy shortcut that exposes all columns which's\r
+``sortable`` attribute is True. This can be very useful in templates, when\r
+doing {% if column.sortable %} can conflict with {{ forloop.last }}.\r
+\r
+\r
 Tables and Pagination\r
 ---------------------\r
 \r
index e6c09ed82ce85b41a0b28cc739284efca1f64ef9..7a284a0a2be66b6f136c95942fb98a775af0dbb8 100644 (file)
@@ -421,6 +421,18 @@ class Columns(object):
         self._spawn_columns()\r
         return self._columns.keyOrder.index(name)\r
 \r
+    def sortable(self):\r
+        """Iterate through all sortable columns.\r
+\r
+        This is primarily useful in templates, where iterating over the full\r
+        set and checking {% if column.sortable %} can be problematic in\r
+        conjunction with e.g. {{ forloop.last }} (the last column might not\r
+        be the actual last that is rendered).\r
+        """\r
+        for column in self.all():\r
+            if column.sortable:\r
+                yield column\r
+\r
     def __iter__(self):\r
         """Iterate through all *visible* bound columns.\r
 \r
index b0dde2f5de57c06b1006721455425c9d3cdac234..589bbfced1aedb85e7335ba5115345f6a87ed026 100644 (file)
@@ -267,10 +267,24 @@ def test_pagination():
     assert books.page.has_previous() == False\r
     assert books.page.has_next() == True\r
 \r
+# TODO: all the column stuff might warrant it's own test file\r
 def test_columns():\r
-    """Test specific column features.\r
+    """Test Table.columns container functionality.\r
+    """\r
+\r
+    class BookTable(tables.Table):\r
+        id = tables.Column(sortable=False)\r
+        name = tables.Column(sortable=True)\r
+        pages = tables.Column(sortable=True)\r
+        language = tables.Column(sortable=False)\r
+    books = BookTable([])\r
 \r
-    Might warrant it's own test file."""\r
+    assert list(books.columns.sortable()) == [c for c in books.columns if c.sortable]\r
+\r
+\r
+def test_column_order():\r
+    """Test the order functionality of bound columns.\r
+    """\r
 \r
     class BookTable(tables.Table):\r
         id = tables.Column()\r