================================================ django-tables2 - An app for creating HTML tables ================================================ .. image:: https://travis-ci.org/bradleyayers/django-tables2.svg :target: https://travis-ci.org/bradleyayers/django-tables2 django-tables2 simplifies the task of turning sets of data into HTML tables. It has native support for pagination and sorting. It does for HTML tables what ``django.forms`` does for HTML forms. e.g. .. figure:: http://dl.dropbox.com/u/33499139/django-tables2/example.png :align: center :alt: An example table rendered using django-tables2 Its features include: - Any iterable can be a data-source, but special support for Django querysets is included. - The builtin UI does not rely on JavaScript. - Support for automatic table generation based on a Django model. - Supports custom column functionality via subclassing. - Pagination. - Column based table sorting. - Template tag to enable trivial rendering to HTML. - Generic view mixin for use in Django 1.3. Creating a table is as simple as: .. code-block:: python import django_tables2 as tables class SimpleTable(tables.Table): class Meta: model = Simple This would then be used in a view: .. code-block:: python def simple_list(request): queryset = Simple.objects.all() table = SimpleTable(queryset) return render_to_response("simple_list.html", {"table": table}, context_instance=RequestContext(request)) And finally in the template:: {% load django_tables2 %} {% render_table table %} This example shows one of the simplest cases, but django-tables2 can do a lot more! Check out the `documentation`__ for more details. .. __: http://django-tables2.readthedocs.org/en/latest/ Building the documentation ========================== If you want to build the docs from within a virtualenv, and Sphinx is installed globally, use:: make html SPHINXBUILD="python $(which sphinx-build)" Change log ========== - `BoundColumn.verbose_name` now titlises only if no verbose_name was given. ``verbose_name`` is used verbatim. v0.15.0 ------- - Add UK, Russian, Spanish, Portuguese, and Polish translations - Add support for computed table ``attrs``. v0.14.0 ------- - ``querystring`` and ``seturlparam`` template tags now require the request to be in the context (backwards incompatible) -- #127 - Add Travis CI support - Add support for Django 1.5 - Add L10N control for columns #120 (ignored in < Django 1.3) - Drop Python 2.6.4 support in favour of Python 3.2 support - Non-queryset data ordering is different between Python 3 and 2. When comparing different types, their truth values are now compared before falling back to string representations of their type. v0.13.0 ------- - Add FileColumn. v0.12.1 ------- - When resolving an accessor, *all* exceptions are smothered into ``None``. v0.12.0 ------- - Improve performance by removing unnecessary queries - Simplified pagination: - ``Table.page`` is an instance attribute (no longer ``@property``) - Exceptions raised by paginators (e.g. ``EmptyPage``) are no longer smothered by ``Table.page`` - Pagination exceptions are raised by ``Table.paginate`` - ``RequestConfig`` can handles pagination errors silently, can be disabled by including ``silent=False`` in the ``paginate`` argument value - Add ``DateTimeColumn`` and ``DateColumn`` to handle formatting ``datetime`` and timezones. - Add ``BooleanColumn`` to handle bool values - ``render_table`` can now build and render a table for a queryset, rather than needing to be passed a table instance - Table columns created automatically from a model now use specialised columns - ``Column.render`` is now skipped if the value is considered *empty*, the default value is used instead. Empty values are specified via ``Column.empty_values``, by default is ``(None, '')`` (backward incompatible) - Default values can now be specified on table instances or ``Table.Meta`` - Accessor's now honor ``alters_data`` during resolving. Fixes issue that would delete all your data when a column had an accessor of ``delete`` - Add ``default`` and ``value`` to context of ``TemplateColumn`` - Add cardinality indication to the pagination area of a table - ``Attrs`` is deprecated, use ``dict`` instead v0.11.0 ------- - Add ``URLColumn`` to render URLs in a data source into hyperlinks - Add ``EmailColumn`` to render email addresses into hyperlinks - ``TemplateColumn`` can now Django's template loaders to render from a file v0.10.4 ------- - Fix more bugs on Python 2.6.4, all tests now pass. v0.10.3 ------- - Fix issues for Python 2.6.4 -- thanks Steve Sapovits & brianmay - Reduce Django 1.3 dependency to Table.as_html -- thanks brianmay v0.10.2 ------- - Fix MANIFEST.in to include example templates, thanks TWAC. - Upgrade django-attest to fix problem with tests on Django 1.3.1 v0.10.1 ------- - Fixed support for Django 1.4's paginator (thanks koledennix) - Some juggling of internal implementation. `TableData` now supports slicing and returns new `TableData` instances. `BoundRows` now takes a single argument `data` (a `TableData` instance). - Add support for `get_pagination` on `SingleTableMixin`. - `SingleTableMixin` and `SingleTableView` are now importable directly from `django_tables2`. v0.10.0 ------- - Renamed `BoundColumn.order_by` to `order_by_alias` and never returns ``None`` (**Backwards incompatible**). Templates are affected if they use something like: {% querystring table.prefixed_order_by_field=column.order_by.opposite|default:column.name %} Which should be rewritten as: {% querystring table.prefixed_order_by_field=column.order_by_alias.next %} - Added `next` shortcut to `OrderBy` returned from `BoundColumn.order_by_alias` - Added `OrderByTuple.get()` - Deprecated `BoundColumn.sortable`, `Column.sortable`, `Table.sortable`, `sortable` CSS class, `BoundColumns.itersortable`, `BoundColumns.sortable`; use `orderable` instead of `sortable`. - Added `BoundColumn.is_ordered` - Introduced concept of an `order by alias`, see glossary in the docs for details. v0.9.6 ------ - Fix bug that caused an ordered column's th to have no HTML attributes. v0.9.5 ------ - Updated example project to add colspan on footer cell so table border renders correctly in Webkit. - Fix regression that caused 'sortable' class on