Change log¶
2.0.0a3 (2018-05-24)¶
Hello from DjangoCon Europe!
2.0.0a2 (2018-04-13)¶
- Another round of template re-cleanup.
- Fresh screenshots
- Prevent crash in
RelatedLinkColumn
for records withoutget_absolute_url()
. - Raise
ValueError
whenTable.Meta.model != QuerySet.Model
. - Raise
TypeError
when incorrect types are used forTable.Meta
attributes (fixes #517) - Fix:
Table.Meta.sequence
withextra_columns
can leads toKeyError
(fixes #486)
django-tables2 2.0.0a0 (2018-04-10)¶
- Cleaned up templates to add consistency in what is presented across all templates.
- Added bootstrap4.html template
- Fixed translation inconsistencies.
breaking changes¶
- Appearance of the paginators might be different from the current 1.x templates. Use a custom template if you need to keep the appearance the same.
- Removed the
template
argument to the table constructor, usetemplate_name
instead. - Stopped adding column names to the class attribute of table cells (
<td>
tags) by default. Previous behavior can be restored by using this method on your custom table:
class MyTable(tables.Table):
# columns
def get_column_class_names(self, classes_set, bound_column):
classes_set = super(MyTable, self).get_column_class_names(classes_set, bound_column)
classes_set.add(bound_column.name)
return classes_set
verbose_name
s derived from model fields are not passed throughtitle()
anymore, only the first character is converted to upper case. This follows Django's convention for verbose field names: "The convention is not to capitalize the first letter of the verbose_name. Django will automatically capitalize the first letter where it needs to." (Fixes #475 and #491)
1.21.2 (2018-03-26)¶
- Moved table instantiation from
get_context_data
toget_tables
#554 by @sdolemelipone - Pass request as kwarg to
template.render()
, rather than as part of context. (fixes #552)
1.21.0 (2018-03-12)¶
- Add new method
paginated_rows
toTable
to replace fallback to non-paginated rows in templates. - Prevent mutation of the template context
{% render_table %}
is called from (fixes #547) Possible breaking change: the context variables of the template{% render_table %}
is called from is no longer available in the table's template. Thetable
variable has an attributecontext
, which is the context of the calling template. Use{{ table.context.variable }}
instead of{{ variable }}
.
1.20.0 (2018-03-08)¶
1.19.0 (2018-02-02)¶
BoundColumn.attrs
does not evaluatecurrent_value
asbool
#536 by @pachewise (fixes #534)- Allow more flexible access to cell values (especially useful for django templates) (fixes #485)
1.18.0 (2018-01-27)¶
1.17.1 (2017-12-14)¶
- Fix typo in setup.py for
extras_require
.
1.17.0 (2017-12-14)¶
- Dropped support for Django 1.8, 1.9 and 1.10.
- Add
extra_context
argument toTemplateColumn
#509 by @ad-m - Remove unnecessary cast of record to
str
#514, fixes #511 - Use
django.test.TestCase
for all tests, and remove dependency on pytest and reorganized some tests #515 - Remove traces of django-haystack tests from the tests, there were no actual tests.
1.16.0 (2017-11-27)¶
This is the last version supporting Django 1.8, 1.9 and 1.10. Django 1.8 is only supported until April 2018, so consider upgrading to Django 1.11!
- Added
tf
dictionary toColumn.attrs
with default values for the footer, so footers now haveclass
attribute by default #501 by @mpasternak
1.15.0 (2017-11-23)¶
- Added
as=varname
keyword argument to the{% querystring %}
template tag, fixes #481 - Updated the tutorial to reflect current state of Django a bit better.
- Used
OrderedDict
rather thandict
as the parent forutils.AttributeDict
to make the rendered html more consistent across python versions. - Allow reading column
attrs
from a column's attribute, allowing easier reuse of custom column attributes (fixes #241) value
andrecord
are optionally passed to the column attrs callables for data rows. #503, fixes #500
1.14.2 (2017-10-30)¶
- Added a
row_counter
variable to the template context inTemplateColumn
(fixes #448)
1.14.1 (2017-10-30)¶
- Do not fail if
orderable=False
is passed toManyToManyColumn()
1.14.0 (2017-10-30)¶
- Added
separator
argument toManyToManyColumn
. - Allow
mark_safe()
'd strings fromManyToManyColumn.tranform()
- Disabled ordering on
ManyToManyColumns
by default.
1.13.0 (2017-10-17)¶
- Made positional
data
argument to the table__init__()
a keyword argument to make inheritance easier. Will raise aTypeError
if omitted.
1.12.0 (2017-10-10)¶
- Allow export file name customization #484 by @federicobond
- Fixed a bug where template columns were not rendered for pinned rows (#483 by @khirstinova, fixes #482)
1.11.0 (2017-09-15)¶
- Added Hungarian translation #471 by @hmikihth.
- Added TemplateColumn.value() and enhanced export docs (fixes #470)
- Fixed display of pinned rows if table has no data. #477 by @khirstinova
1.10.0 (2017-06-30)¶
- Added
ManyToManyColumn
automatically added forManyToManyField
s.
1.9.1 (2017-06-29)¶
1.8.0 (2017-06-17)¶
- Feature: Added an
ExportMixin
to export table data in various export formats (CSV, XLS, etc.) using tablib. - Defer expanding
Meta.sequence
toTable.__init__
, to make sequence work in combination withextra_columns
(fixes #450) - Fixed a crash when
MultiTableMixin.get_tables()
returned an empty array (#454 by @pypetey
1.7.1 (2017-06-02)¶
- Call before_render when rendering with the render_table template tag (fixes #447)
1.7.0 (2017-06-01)¶
- Make
title()
lazy (#443 by @ygwain, fixes #438) - Fix
__all__
by populating them with the names of the items to export instead of the items themselves. - Allow adding extra columns to an instance using the
extra_columns
argument. Fixes #403, #70 - Added a hook
before_render
to allow last-minute changes to the table before rendering. - Added
BoundColumns.show()
andBoundColumns.hide()
to show/hide columns on an instance of aTable
. - Use
<listlike>.verbose_name
/.verbose_name_plural
if it exists to name the items in the list. (fixes #166)
1.6.1 (2017-05-08)¶
- Add missing pagination to the responsive bootstrap template (#440 by @tobiasmcnulty)
1.6.0 (2017-05-01)¶
- Add new template
bootstrap-responsive.html
to generate a responsive bootstrap table. (Fixes #436)
1.5.0 (2017-04-18)¶
Full disclosure: as of april 1st, 2017, I am an employee of Zostera, as such I will continue to maintain and improve django-tables2.
- Made
TableBase.as_values()
an iterator (#432 by @pziarsolo) - Added
JSONField
for data in JSON format. - Added
__all__
indjango_tables2/__init__.py
anddjango_tables2/columns/__init__.py
- Added a setting
DJANGO_TABLES2_TEMPLATE
to allow project-wide overriding of the template used to render tables (fixes #434).
1.4.2 (2017-03-06)¶
1.4.1 (2017-02-27)¶
- Fix URLS to screenshots in on PyPi description (fixes #398)
- Prevent superfluous spaces when a callable
row_attrs['class']
returns an empty string (#417 by @Superman8218), fixes #416)
1.4.0 (2017-02-27)¶
1.3.0 (2017-01-20)¶
- Implement method
Table.as_values()
to get it's raw values. #394 by @intiocean - Fix some compatibility issues with django 2.0 #408 by djk2
1.2.8 (2016-12-21)¶
1.2.7 (2016-12-12)¶
- Apply
title
to a column'sverbose_name
when it is derived from a model, fixes #249. (#382 by @shawnnapora) - Update documentation after deprecation of
STATIC_URL
in django (#384, by @velaia) - Cleanup of the templates, making the output more equal (#381 by @ralgozino)
- Use new location for
urlresolvers
in Django and add backwards compatible import (#388 by @felixxm) - Fix a bug where using
sequence
and thenexclude
in a child table would result in aKeyError
- Some documentation fixes and cleanups.
1.2.6 (2016-09-06)¶
- Added
get_table_kwargs()
method toSingleTableMixin
to allow passing custom keyword arguments to theTable
constructor. (#366 by @fritz-k) - Allow the children of
TableBase
render in the{% render_table %}
template tag. (#377 by @shawnnapora) - Refactor
BoundColumn
attributes to allow override of CSS class names, fixes #349 (#370 by @graup). Current behavior should be intact, we will change the default in the future so it will not add the column name to the list of CSS classes.
1.2.5 (2016-07-30)¶
- Fixed an issue preventing the rest of the row being rendered if a
BooleanColumn
was in the table for a model without custom choices defined on the model field. (#360)
1.2.4 (2016-07-28)¶
- Added Norwegian Locale (#356 by @fanzypantz)
- Restore default pagination for
SingleTableMixin
, fixes #354 (#395 by @graup)
1.2.3 (2016-07-05)¶
v1.2.2 (2016-06-04)¶
- Allow use of custom class names for ordered columns through
attrs
. ( #329 by @theTarkus) - Column ordering QuerySet pass through (#330 by @theTarkus)
- Cleanup/restructuring of documentation, (#325)
- Fixed an issue where explicitly defined column options where not preserved over inheritance (#339, issue #337)
- Fixed an issue where
exclude
in combination withsequence
raised a KeyError (#341, issue #205)
v1.2.1 (2016-05-09)¶
- table footers (#323)
- Non-field based
LinkColumn
only renders default value if lookup fails. (#322) - Accept
text
parameter inBaseLinkColumn
-based columns. (#322) - Pass the table instance into SingleTableMixin's
get_table_pagination
(#320 by @georgema1982, fixes #319) - Check if the view has
paginate_by
before before trying to access it. (fixes #326)
v1.2.0 (2016-05-02)¶
- Allow custom attributes for rows (fixes #47)
v1.1.8 (2016-05-02)¶
- Ability to change the body of the
<a>
-tag, by passingtext
kwarg to the columns inheriting from BaseLinkColumn (#318 by @desecho, #322) - Non-field based LinkColumn only renders default value if lookup fails and text is not set. (#322, fixes #257)
v1.1.7 (2016-04-26)¶
- Added Italian translation (#315 by @paolodina
- Added Dutch translation.
- Fixed {% blocktrans %} template whitespace issues
- Fixed errors when using a column named
items
(#316) - Obey
paginate_by
(fromMultipleObjectMixin
) if no later pagination is defined (#242)
v1.1.6 (2016-04-02)¶
- Correct error message about request context processors for current Django (#314)
- Skipped 1.1.5 due to an error while creating the tag.
v1.1.4 (2016-03-22)¶
- Fix broken
setup.py
if Django is not installed before django-tables2 (fixes #312)
v1.1.3 (2016-03-21)¶
- Drop support for Django 1.7
- Add argument to
CheckBoxColumn
to render it as checked (original PR: #208)
v1.1.2 (2016-02-16)¶
- Fix
BooleanColumn
with choices set will always render as ifTrue
(#301) - Fix a bug with
TemplateColumn
while using cached template loader (#75)
v1.1.1 (2016-01-26)¶
- Allow
Meta.fields
to be a list as well as a tuple (#250) - Call template.render with a dict in Django >= 1.8. (#298)
- Added
RelatedLinkColumn()
to render links to related objects (#297) - Remove default value from request parameter to
table.as_html()
v1.1.0 (2016-01-19)¶
- Add tests for
TimeColumn
- Remove
sortable
argument forTable
and Column constructors and its associated methods. Deprecated since 2012. - Remove deprecated aliases for
attrs
inCheckboxColumn
. - Remove deprecated
OrderByTuple
cmp
method (deprecated since 2013). - Add bootstrap template and (#293, fixes #141, #285)
- Fix different html for tables with and without pagination (#293, fixes #149, #285)
- Remove
{% nospaceless %}
template tag and remove wrapping template in{% spaceless %}
Possible breaking change, if you use custom templates.
v1.0.7 (2016-01-03)¶
- Explicitly check if
column.verbose_name
is not None to support empty column headers (fixes #280) - Cleanup the example project to make it work with modern Django versions.
- Do not sort
QuerySet
whenorderable=False
(#204 by @bmihelac) show_header
attribute onTable
allows disabling the header (#175 by @kviktor)LinkColumn
now tries to callget_absolute_url
on a record if noviewname
is provided (#283, fixes #231).- Add
request
argument toTable.as_html()
to allow passing correct request objects instead of poorly generated ones #282 - Add coverage reporting to build #282
- Drop support for python 3.2 (because of coverage), support ends February 2016 #282
- move
build_request
fromdjango_table2.utils
totests.utils
and amend tests #282
v1.0.6 (2015-12-29)¶
- Support for custom text value in
LinkColumn
(#277 by @toudi) - Refactor
LinkColumn.render_link()
to not escape twice #279 - Removed
Attrs
(wrapper for dict), deprecated on 2012-09-18 - Convert README.md to rst in setup.py to make PyPI look nice (fixes #97)
v1.0.5 (2015-12-17)¶
- First version released by new maintainer @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 callingget_queryset
twice. (fixes #155) - Don't call managers when resolving accessors. (#214 by @mbertheau, fixes #211)
v1.0.4 (2015-05-09)¶
- 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 is a distutils2 thing that is been discontinued.
v1.0.2¶
- Add
setup.cfg
to declareREADME.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.
- Convert tests to using
py.test
.
v0.16.0¶
- Django 1.8 fixes
BoundColumn.verbose_name
now only is capitalized 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
andseturlparam
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 favor 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 byTable.page
- Pagination exceptions are raised by
Table.paginate
RequestConfig
can handles pagination errors silently, can be disabled by includingsilent=False
in thepaginate
argument value
- Add
DateTimeColumn
andDateColumn
to handle formattingdatetime
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 specialized columns
Column.render
is now skipped if the value is considered empty, the default value is used instead. Empty values are specified viaColumn.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 ofdelete
- Add
default
andvalue
to context ofTemplateColumn
- Add cardinality indication to the pagination area of a table
Attrs
is deprecated, usedict
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 newTableData
instances.BoundRows
now takes a single argumentdata
(aTableData
instance). - Add support for
get_pagination
onSingleTableMixin
. SingleTableMixin
andSingleTableView
are now importable directly fromdjango_tables2
.
v0.10.0¶
Renamed
BoundColumn.order_by
toorder_by_alias
and never returnsNone
(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 toOrderBy
returned fromBoundColumn.order_by_alias
Added
OrderByTuple.get()
Deprecated
BoundColumn.sortable
,Column.sortable
,Table.sortable
,sortable
CSS class,BoundColumns.itersortable
,BoundColumns.sortable
; useorderable
instead ofsortable
.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
. 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 returningNone
, previously it would always return anOrderByTuple
.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 usesRequestConfig
. This fixes issues withorder_by_field
,page_field
, andper_page_field
not being honored.- Add
Table.Meta.per_page
and changeTable.paginate
to use it as default. - Add
title
template filter. It differs from Django's built-intitle
filter because it operates on an individual word basis and leaves words containing capitals untouched. Warning: use{% load ... from ... %}
to avoid inadvertently replacing Django's built-intitle
template filter. BoundColumn.verbose_name
no longer doescapfirst
, capitalizing is now the responsibility ofColumn.header
.BoundColumn.__unicode__
now usesBoundColumn.header
rather thanBoundColumn.verbose_name
.
v0.9.1¶
- Fix version in
setup.py
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
- removed
v0.8.3¶
- Fixed stupid import mistake. Tests didn't pick it up due to them ignoring
ImportError
.
v0.8.2¶
SingleTableView
now inherits fromListView
which enables automaticfoo_list.html
template name resolution (thanks dramon for reporting)render_table
template tag no suppresses exceptions whenDEBUG=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 renderstable.html
but will clobber the query string of the current request. Use therender_table
template tag instead render_table
now supports an optional second argument -- the template to use when rendering the tableTable
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 toTable.paginate()
, instead it now occurs whenTable.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
andexclude
(issue #32). Sequence
class moved todjango_tables2/utils.py
.- Table instances now support modification to the
exclude
property. - Removed
BoundColumns._spawn_columns
. Table.data
,Table.rows
, andTable.columns
are now attributes rather than properties.