Added ability to specify attrs keyword argument to a table constructor to override...
authorBradley Ayers <bradley.ayers@gmail.com>
Mon, 6 Jun 2011 13:29:18 +0000 (23:29 +1000)
committerBradley Ayers <bradley.ayers@gmail.com>
Mon, 6 Jun 2011 13:29:18 +0000 (23:29 +1000)
django_tables/tables.py
docs/index.rst
tests/core.py

index 7d516c5b3f6c9b91c31d99d5be2cb177e3d60f2a..fc9fc5d987d90ccb8acdc6e629897e8f9fc3a108 100644 (file)
@@ -6,6 +6,7 @@ from django.http import Http404
 from django.template.loader import get_template
 from django.template import Context
 from django.utils.encoding import StrAndUnicode
+from django.db.models.query import QuerySet
 from .utils import OrderBy, OrderByTuple, Accessor, AttributeDict
 from .rows import BoundRows, BoundRow
 from .columns import BoundColumns, Column
@@ -22,9 +23,7 @@ class TableData(object):
     This class is used by :class:`.Table` to wrap any
     input table data.
     """
-
     def __init__(self, data, table):
-        from django.db.models.query import QuerySet
         if isinstance(data, QuerySet):
             self.queryset = data
         elif isinstance(data, list):
@@ -185,10 +184,11 @@ class Table(StrAndUnicode):
     TableDataClass = TableData
 
     def __init__(self, data, order_by=None, sortable=None, empty_text=None,
-                 exclude=None):
+                 exclude=None, attrs=None):
         self._rows = BoundRows(self)
         self._columns = BoundColumns(self)
         self._data = self.TableDataClass(data=data, table=self)
+        self.attrs = attrs
         self.empty_text = empty_text
         self.sortable = sortable
         if order_by is None:
@@ -282,7 +282,11 @@ class Table(StrAndUnicode):
 
         :rtype: :class:`~.utils.AttributeDict` object.
         """
-        return self._meta.attrs
+        return self._attrs if self._attrs is not None else self._meta.attrs
+
+    @attrs.setter
+    def attrs(self, value):
+        self._attrs = value
 
     def paginate(self, klass=Paginator, per_page=25, page=1, *args, **kwargs):
         self.paginator = klass(self.rows, per_page, *args, **kwargs)
index d6e6a3f89fc00d94f7f89bd3845e8e35ff38bda0..be8b6071bc3c24f02295d41690a40715cd6384e1 100644 (file)
@@ -718,10 +718,20 @@ API Reference
 
         Default: ``{}``
 
+        .. note::
+
+            This functionality is also available via the ``attrs`` keyword
+            argument to a table's constructor.
+
     .. attribute:: empty_text
 
         Defines the text to display when the table has no rows.
 
+        .. note::
+
+            This functionality is also available via the ``empty_text`` keyword
+            argument to a table's constructor.
+
     .. attribute:: exclude
 
         Defines which columns should be excluded from the table. This is useful
@@ -745,6 +755,11 @@ API Reference
 
         Default: ``()``
 
+        .. note::
+
+            This functionality is also available via the ``exclude`` keyword
+            argument to a table's constructor.
+
     .. attribute:: order_by
 
         The default ordering. e.g. ``('name', '-age')``. A hyphen ``-`` can be
@@ -754,6 +769,11 @@ API Reference
 
         Default: ``()``
 
+        .. note::
+
+            This functionality is also available via the ``order_by`` keyword
+            argument to a table's constructor.
+
     .. attribute:: sortable
 
         The default value for determining if a :class:`.Column` is sortable.
@@ -767,6 +787,11 @@ API Reference
 
         Default: :const:`True`
 
+        .. note::
+
+            This functionality is also available via the ``sortable`` keyword
+            argument to a table's constructor.
+
 
 :class:`TableData` Objects:
 ------------------------------
index 50af9ffbe928c7e108e60c22853dd5043b888e04..24f5b3aeedbf0296aeb5ae26b17d95f2f663d628 100644 (file)
@@ -56,6 +56,29 @@ def declarations():
     assert 'added' in CityTable.base_columns
 
 
+@core.test
+def attrs():
+    class TestTable(tables.Table):
+        class Meta:
+            attrs = {}
+    Assert({}) == TestTable([]).attrs
+
+    class TestTable2(tables.Table):
+        class Meta:
+            attrs = {"a": "b"}
+    Assert({"a": "b"}) == TestTable2([]).attrs
+
+    class TestTable3(tables.Table):
+        pass
+    Assert({}) == TestTable3([]).attrs
+    Assert({"a": "b"}) == TestTable3([], attrs={"a": "b"}).attrs
+
+    class TestTable4(tables.Table):
+        class Meta:
+            attrs = {"a": "b"}
+    Assert({"c": "d"}) == TestTable4([], attrs={"c": "d"}).attrs
+
+
 @core.test
 def datasource_untouched():
     """Ensure that data that is provided to the table (the datasource) is not