Internal APIs¶
The items documented here are internal and subject to change. It exists here for convenience.
BoundColumns¶
-
class
django_tables2.columns.BoundColumns(table)[source]¶ Container for spawning
BoundColumnobjects.This is bound to a table and provides its
Table.columnsproperty. It provides access to those columns in different ways (iterator, item-based, filtered and unfiltered etc), stuff that would not be possible with a simple iterator in the table class.A
BoundColumnsobject is a container for holdingBoundColumnobjects. It provides methods that make accessing columns easier than if they were stored in alistordict.Columnshas a similar API to adict(it actually uses aOrderedDictinterally).At the moment you’ll only come across this class when you access a
Table.columnsproperty.Parameters: table ( Tableobject) – the table containing the columns-
__contains__(item)[source]¶ Check if a column is contained within a
Columnsobject.item can either be a
BoundColumnobject, or the name of a column.
-
__getitem__(index)[source]¶ Retrieve a specific
BoundColumnobject.index can either be 0-indexed or the name of a column
columns['speed'] # returns a bound column with name 'speed' columns[0] # returns the first column
-
__iter__()[source]¶ Convenience API, alias of
itervisible.
-
__weakref__¶ list of weak references to the object (if defined)
-
iterall()[source]¶ Return an iterator that exposes all
BoundColumnobjects, regardless of visiblity or sortability.
-
iteritems()[source]¶ Return an iterator of
(name, column)pairs (wherecolumnis aBoundColumn).This method is the mechanism for retrieving columns that takes into consideration all of the ordering and filtering modifiers that a table supports (e.g.
excludeandsequence).
-
iterorderable()[source]¶ Same as
BoundColumns.allbut only returns orderable columns.This is useful in templates, where iterating over the full set and checking
{% if column.sortable %}can be problematic in conjunction with e.g.{{ forloop.last }}(the last column might not be the actual last that is rendered).
-
itervisible()[source]¶ Same as
iterorderablebut only returns visibleBoundColumnobjects.This is geared towards table rendering.
-
BoundColumn¶
-
class
django_tables2.columns.BoundColumn(table, column, name)[source]¶ A run-time version of
Column. The difference betweenBoundColumnandColumn, is thatBoundColumnobjects include the relationship between aColumnand aTable. In practice, this means that aBoundColumnknows the “variable name” given to theColumnwhen it was declared on theTable.For convenience, all
Columnproperties are available from thisclass.Parameters: -
__weakref__¶ list of weak references to the object (if defined)
-
accessor¶ Returns the string used to access data for this column out of the data source.
-
attrs¶ Proxy to
Column.attrsbut injects some values of our own.A
thandtdare guaranteed to be defined (irrespective of what’s actually defined in the column attrs. This makes writing templates easier.
-
default¶ Returns the default value for this column.
-
header¶ The value that should be used in the header cell for this column.
-
order_by¶ Returns an
OrderByTupleof appropriately prefixed data source keys used to sort this column.See
order_by_aliasfor details.
-
order_by_alias¶ Returns an
OrderBydescribing the current state of ordering for this column.The following attempts to explain the difference between
order_byandorder_by_alias.order_by_aliasreturns andOrderByinstance that’s based on the name of the column, rather than the keys used to order the table data. Understanding the difference is essential.Having an alias and a keys version is necessary because an N-tuple (of data source keys) can be used by the column to order the data, and it’s ambiguous when mapping from N-tuple to column (since multiple columns could use the same N-tuple).
The solution is to use order by aliases (which are really just prefixed column names) that describe the ordering state of the column, rather than the specific keys in the data source should be ordered.
e.g.:
>>> class SimpleTable(tables.Table): ... name = tables.Column(order_by=("firstname", "last_name")) ... >>> table = SimpleTable([], order_by=("-name", )) >>> table.columns["name"].order_by_alias "-name" >>> table.columns["name"].order_by ("-first_name", "-last_name")
The
OrderByreturned has been patched to include an extra attributenext, which returns a version of the alias that would be transitioned to if the user toggles sorting on this column, e.g.:not sorted -> ascending ascending -> descending descending -> ascending
This is useful otherwise in templates you’d need something like:
{% if column.is_ordered %} {% querystring table.prefixed_order_by_field=column.order_by_alias.opposite %} {% else %} {% querystring table.prefixed_order_by_field=column.order_by_alias %} {% endif %}
-
sortable¶ deprecated – use
orderableinstead.
-
verbose_name¶ Return the verbose name for this column, or fallback to the titlised column name.
If the table is using queryset data, then use the corresponding model field’s
verbose_name. If it’s traversing a relationship, then get the last field in the accessor (i.e. stop when the relationship turns from ORM relationships to object attributes [e.g. person.upper should stop at person]).
-
BoundRows¶
-
class
django_tables2.rows.BoundRows(data, table)[source]¶ Container for spawning
BoundRowobjects.Parameters: - data – iterable of records
- table – the table in which the rows exist
This is used for
Table.rows.-
__getitem__(key)[source]¶ Slicing returns a new
BoundRowsinstance, indexing returns a singleBoundRowinstance.
-
__weakref__¶ list of weak references to the object (if defined)
BoundRow¶
-
class
django_tables2.rows.BoundRow(record, table)[source]¶ Represents a specific row in a table.
BoundRowobjects are a container that make it easy to access the final ‘rendered’ values for cells in a row. You can simply iterate over aBoundRowobject and it will take care to return values rendered using the correct method (e.g. Table.render_FOO() methods)To access the rendered value of each cell in a row, just iterate over it:
>>> import django_tables2 as tables >>> class SimpleTable(tables.Table): ... a = tables.Column() ... b = tables.CheckBoxColumn(attrs={'name': 'my_chkbox'}) ... >>> table = SimpleTable([{'a': 1, 'b': 2}]) >>> row = table.rows[0] # we only have one row, so let's use it >>> for cell in row: ... print cell ... 1 <input type="checkbox" name="my_chkbox" value="2" />
Alternatively you can treat it like a list and use indexing to retrieve a specific cell. It should be noted that this will raise an IndexError on failure.
>>> row[0] 1 >>> row[1] u'<input type="checkbox" name="my_chkbox" value="2" />' >>> row[2] ... IndexError: list index out of range
Finally you can also treat it like a dictionary and use column names as the keys. This will raise KeyError on failure (unlike the above indexing using integers).
>>> row['a'] 1 >>> row['b'] u'<input type="checkbox" name="my_chkbox" value="2" />' >>> row['c'] ... KeyError: 'c'
Parameters: - table – is the
Tablein which this row exists. - record – a single record from the table data that is used to
populate the row. A record could be a
Modelobject, adict, or something else.
-
__getitem__(name)[source]¶ Returns the final rendered value for a cell in the row, given the name of a column.
-
__iter__()[source]¶ Iterate over the rendered values for cells in the row.
Under the hood this method just makes a call to
BoundRow.__getitem__for each cell.
-
__weakref__¶ list of weak references to the object (if defined)
-
items()[source]¶ Returns iterator yielding
(bound_column, cell)pairs.cell is
row[name]– the rendered unicode value that should berendered within ``<td>.
-
record¶ The data record from the data source which is used to populate this row with data.
- table – is the
TableData¶
-
class
django_tables2.tables.TableData(data, table)[source]¶ Exposes a consistent API for table data.
Parameters: -
__getitem__(key)[source]¶ Slicing returns a new
TableDatainstance, indexing returns a single record.
-
__iter__()[source]¶ for ... in ... default to using this. There’s a bug in Django 1.3 with indexing into querysets, so this side-steps that problem (as well as just being a better way to iterate).
-
__weakref__¶ list of weak references to the object (if defined)
-