Table/data-grid framework for Django
Project description
django-tables2 - An app for creating HTML tables
================================================
|Build status|
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
:alt: An example table rendered using django-tables2
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.
Example
=======
Creating a table for a model ``Simple`` is as simple as:
.. code:: python
import django_tables2 as tables
class SimpleTable(tables.Table):
class Meta:
model = Simple
This would then be used in a view:
.. code:: 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 <http://django-tables2.readthedocs.org/en/latest/>`__ for
more details.
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)"
Publishing a release
====================
1. Bump the version in ``django-tables2/__init__.py``.
2. Update ``README.md``.
3. Run
``python setup.py sdist upload --sign --identity=<your gpg identity>``.
Change log
==========
v1.0.6
------
- Support for custom text value in LinkColumn (#277 by
[@toudi](https://github.com/toudi))
- Refactor LinkColumn.render\_link() to not escape twice #279
- Removed ``Attrs`` (wrapper for dict), deprecated on 2012-09-18
v1.0.5
------
- First version released by new maintainer
[@jieter](https://github.com/jieter)
- Dropped support for django 1.5 and 1.6, add python 3.5 with django
1.8 and 1.9 to the build matrix (#273)
- Prevent ``SingleTableView`` from calling ``get_queryset`` twice.
(fixes #155)
- Don't call managers when resolving accessors. (#214 by
[@mbertheau](https://github.com/mbertheau), fixes #211)
v1.0.4
------
- Fix bug in retrieving ``field.verbose_name`` under Django 1.8.
v1.0.3
------
- Remove setup.cfg as PyPI doesn't actually support it, instead it's a
distutils2 thing that's been discontinued.
v1.0.2
------
- Add setup.cfg to declare README.md for PyPI.
v1.0.1
------
- Convert README to markdown so it's formatted nicely on PyPI.
v1.0.0
------
- Travis CI builds pass.
- Added Python 3.4 support.
- Added Django 1.7 and Django 1.8 support.
- Dropped Python 2.6 and 3.2 support.
- Drop Django 1.2 support
- Convert tests to using py.test.
v0.16.0
-------
- Django 1.8 fixes
- ``BoundColumn.verbose_name`` now titlises only if no verbose\_name
was given. ``verbose_name`` is used verbatim.
- Add max\_length attribute to person CharField
- Add Swedish translation
- Update docs presentation on readthedocs
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
.. raw:: html
<th>
.
- Table.\ **init** no longer *always* calls .order\_by() on querysets,
fixes #55. This does introduce a slight backwards incompatibility.
``Table.order_by`` now has the possibility of returning ``None``,
previously it would *always* return an ``OrderByTuple``.
- DeclarativeColumnsMetaclass.\ **new** now uses super()
- Testing now requires pylint and Attest >=0.5.3
v0.9.4
------
- Fix regression that caused column verbose\_name values that were
marked as safe to be escaped. Now any verbose\_name values that are
instances of SafeData are used unmodified.
v0.9.3
------
- Fix regression in ``SingleTableMixin``.
- Remove stray ``print`` statement.
v0.9.2
------
- ``SingleTableView`` now uses ``RequestConfig``. This fixes issues
with ``order_by_field``, ``page_field``, and ``per_page_field`` not
being honored.
- Add ``Table.Meta.per_page`` and change ``Table.paginate`` to use it
as default.
- Add ``title`` template filter. It differs from Django's built-in
``title`` filter because it operates on an individual word basis and
leaves words containing capitals untouched. **Warning**: use
``{% load ... from ... %}`` to avoid inadvertantly replacing Django's
builtin ``title`` template filter.
- ``BoundColumn.verbose_name`` no longer does ``capfirst``, titlising
is now the responsbility of ``Column.header``.
- ``BoundColumn.__unicode__`` now uses ``BoundColumn.header`` rather
than ``BoundColumn.verbose_name``.
v0.9.1
------
- Fix version in setup.py (doh)
v0.9.0
------
- Add support for column attributes (see Attrs)
- Add BoundRows.items() to yield (bound\_column, cell) pairs
- Tried to make docs more concise. Much stronger promotion of using
RequestConfig and {% querystring %}
v0.8.4
------
- Removed random 'print' statements.
- Tweaked 'paleblue' theme css to be more flexible
- removed ``whitespace: no-wrap``
- header background image to support more than 2 rows of text
v0.8.3
------
- Fixed stupid import mistake. Tests didn't pick it up due to them
ignoring ``ImportError``.
v0.8.2
------
- ``SingleTableView`` now inherits from ``ListView`` which enables
automatic ``foo_list.html`` template name resolution (thanks dramon
for reporting)
- ``render_table`` template tag no suppresses exceptions when
``DEBUG=True``
v0.8.1
------
- Fixed bug in render\_table when giving it a template (issue #41)
v0.8.0
------
- Added translation support in the default template via ``{% trans %}``
- Removed ``basic_table.html``, ``Table.as_html()`` now renders
``table.html`` but will clobber the querystring of the current
request. Use the ``render_table`` template tag instead
- ``render_table`` now supports an optional second argument -- the
template to use when rendering the table
- ``Table`` now supports declaring which template to use when rendering
to HTML
- Django >=1.3 is now required
- Added support for using django-haystack's ``SearchQuerySet`` as a
data source
- The default template ``table.html`` now includes block tags to make
it easy to extend to change small pieces
- Fixed table template parsing problems being hidden due to a
subsequent exception being raised
- Http404 exceptions are no longer raised during a call to
``Table.paginate()``, instead it now occurs when ``Table.page`` is
accessed
- Fixed bug where a table couldn't be rendered more than once if it was
paginated
- Accessing ``Table.page`` now returns a new page every time, rather
than reusing a single object
v0.7.8
------
- Tables now support using both ``sequence`` and ``exclude`` (issue
#32).
- ``Sequence`` class moved to ``django_tables2/utils.py``.
- Table instances now support modification to the ``exclude`` property.
- Removed ``BoundColumns._spawn_columns``.
- ``Table.data``, ``Table.rows``, and ``Table.columns`` are now
attributes rather than properties.
.. |Build status| image:: https://travis-ci.org/bradleyayers/django-tables2.svg
:target: https://travis-ci.org/bradleyayers/django-tables2
================================================
|Build status|
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
:alt: An example table rendered using django-tables2
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.
Example
=======
Creating a table for a model ``Simple`` is as simple as:
.. code:: python
import django_tables2 as tables
class SimpleTable(tables.Table):
class Meta:
model = Simple
This would then be used in a view:
.. code:: 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 <http://django-tables2.readthedocs.org/en/latest/>`__ for
more details.
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)"
Publishing a release
====================
1. Bump the version in ``django-tables2/__init__.py``.
2. Update ``README.md``.
3. Run
``python setup.py sdist upload --sign --identity=<your gpg identity>``.
Change log
==========
v1.0.6
------
- Support for custom text value in LinkColumn (#277 by
[@toudi](https://github.com/toudi))
- Refactor LinkColumn.render\_link() to not escape twice #279
- Removed ``Attrs`` (wrapper for dict), deprecated on 2012-09-18
v1.0.5
------
- First version released by new maintainer
[@jieter](https://github.com/jieter)
- Dropped support for django 1.5 and 1.6, add python 3.5 with django
1.8 and 1.9 to the build matrix (#273)
- Prevent ``SingleTableView`` from calling ``get_queryset`` twice.
(fixes #155)
- Don't call managers when resolving accessors. (#214 by
[@mbertheau](https://github.com/mbertheau), fixes #211)
v1.0.4
------
- Fix bug in retrieving ``field.verbose_name`` under Django 1.8.
v1.0.3
------
- Remove setup.cfg as PyPI doesn't actually support it, instead it's a
distutils2 thing that's been discontinued.
v1.0.2
------
- Add setup.cfg to declare README.md for PyPI.
v1.0.1
------
- Convert README to markdown so it's formatted nicely on PyPI.
v1.0.0
------
- Travis CI builds pass.
- Added Python 3.4 support.
- Added Django 1.7 and Django 1.8 support.
- Dropped Python 2.6 and 3.2 support.
- Drop Django 1.2 support
- Convert tests to using py.test.
v0.16.0
-------
- Django 1.8 fixes
- ``BoundColumn.verbose_name`` now titlises only if no verbose\_name
was given. ``verbose_name`` is used verbatim.
- Add max\_length attribute to person CharField
- Add Swedish translation
- Update docs presentation on readthedocs
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
.. raw:: html
<th>
.
- Table.\ **init** no longer *always* calls .order\_by() on querysets,
fixes #55. This does introduce a slight backwards incompatibility.
``Table.order_by`` now has the possibility of returning ``None``,
previously it would *always* return an ``OrderByTuple``.
- DeclarativeColumnsMetaclass.\ **new** now uses super()
- Testing now requires pylint and Attest >=0.5.3
v0.9.4
------
- Fix regression that caused column verbose\_name values that were
marked as safe to be escaped. Now any verbose\_name values that are
instances of SafeData are used unmodified.
v0.9.3
------
- Fix regression in ``SingleTableMixin``.
- Remove stray ``print`` statement.
v0.9.2
------
- ``SingleTableView`` now uses ``RequestConfig``. This fixes issues
with ``order_by_field``, ``page_field``, and ``per_page_field`` not
being honored.
- Add ``Table.Meta.per_page`` and change ``Table.paginate`` to use it
as default.
- Add ``title`` template filter. It differs from Django's built-in
``title`` filter because it operates on an individual word basis and
leaves words containing capitals untouched. **Warning**: use
``{% load ... from ... %}`` to avoid inadvertantly replacing Django's
builtin ``title`` template filter.
- ``BoundColumn.verbose_name`` no longer does ``capfirst``, titlising
is now the responsbility of ``Column.header``.
- ``BoundColumn.__unicode__`` now uses ``BoundColumn.header`` rather
than ``BoundColumn.verbose_name``.
v0.9.1
------
- Fix version in setup.py (doh)
v0.9.0
------
- Add support for column attributes (see Attrs)
- Add BoundRows.items() to yield (bound\_column, cell) pairs
- Tried to make docs more concise. Much stronger promotion of using
RequestConfig and {% querystring %}
v0.8.4
------
- Removed random 'print' statements.
- Tweaked 'paleblue' theme css to be more flexible
- removed ``whitespace: no-wrap``
- header background image to support more than 2 rows of text
v0.8.3
------
- Fixed stupid import mistake. Tests didn't pick it up due to them
ignoring ``ImportError``.
v0.8.2
------
- ``SingleTableView`` now inherits from ``ListView`` which enables
automatic ``foo_list.html`` template name resolution (thanks dramon
for reporting)
- ``render_table`` template tag no suppresses exceptions when
``DEBUG=True``
v0.8.1
------
- Fixed bug in render\_table when giving it a template (issue #41)
v0.8.0
------
- Added translation support in the default template via ``{% trans %}``
- Removed ``basic_table.html``, ``Table.as_html()`` now renders
``table.html`` but will clobber the querystring of the current
request. Use the ``render_table`` template tag instead
- ``render_table`` now supports an optional second argument -- the
template to use when rendering the table
- ``Table`` now supports declaring which template to use when rendering
to HTML
- Django >=1.3 is now required
- Added support for using django-haystack's ``SearchQuerySet`` as a
data source
- The default template ``table.html`` now includes block tags to make
it easy to extend to change small pieces
- Fixed table template parsing problems being hidden due to a
subsequent exception being raised
- Http404 exceptions are no longer raised during a call to
``Table.paginate()``, instead it now occurs when ``Table.page`` is
accessed
- Fixed bug where a table couldn't be rendered more than once if it was
paginated
- Accessing ``Table.page`` now returns a new page every time, rather
than reusing a single object
v0.7.8
------
- Tables now support using both ``sequence`` and ``exclude`` (issue
#32).
- ``Sequence`` class moved to ``django_tables2/utils.py``.
- Table instances now support modification to the ``exclude`` property.
- Removed ``BoundColumns._spawn_columns``.
- ``Table.data``, ``Table.rows``, and ``Table.columns`` are now
attributes rather than properties.
.. |Build status| image:: https://travis-ci.org/bradleyayers/django-tables2.svg
:target: https://travis-ci.org/bradleyayers/django-tables2
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
django-tables2-1.0.6.tar.gz
(971.0 kB
view details)
File details
Details for the file django-tables2-1.0.6.tar.gz
.
File metadata
- Download URL: django-tables2-1.0.6.tar.gz
- Upload date:
- Size: 971.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29fda34506d220dba3e95c02b96fa3f323c91c8ffb6d957e51f49c29721752f6 |
|
MD5 | 319927cac8fc20409426abb7c5ea88aa |
|
BLAKE2b-256 | 701294d9e96fe8ee6d7ca639679586c0afc7e4be6972d57b441b9f9b40e46d9c |