# Change log

## master
- Added Norwegian Locale ([#356](https://github.com/bradleyayers/django-tables2/issues/356) by [@fanzypantz](https://github.com/fanzypantz))
- Restore default pagination for `SingleTableMixin`, fixes [#354](https://github.com/bradleyayers/django-tables2/issues/354) ([#395](https://github.com/bradleyayers/django-tables2/pull/359) by [@graup](https://github.com/graup))

## 1.2.3 (2016-07-05)
 - Accept `text` parameter in `FileColumn`, analogous to `LinkColumn` ([#343](https://github.com/bradleyayers/django-tables2/pull/343) by [@graup](https://github.com/graup))
 - Fix TemplateColumn RemovedInDjango110Warning fixes [#346](https://github.com/bradleyayers/django-tables2/issues/346).
 - Use field name in RelatedColumnLink ([#350](https://github.com/bradleyayers/django-tables2/pull/350), fixes [#347](https://github.com/bradleyayers/django-tables2/issues/347)

## v1.2.2 (2016-06-04)
- Allow use of custom class names for ordered columns through `attrs`. (
[#329](https://github.com/bradleyayers/django-tables2/pull/329) by [@theTarkus](https://github.com/theTarkus))
- Column ordering queryset passthrough ([#330](https://github.com/bradleyayers/django-tables2/pull/330) by [@theTarkus](https://github.com/theTarkus))
- Cleanup/restructuring of [documentation](http://django-tables2.readthedocs.io/), ([#325](https://github.com/bradleyayers/django-tables2/pull/325)
- Fixed an issue where explicitly defined column options where not preserved over inheritance ([#339](https://github.com/bradleyayers/django-tables2/pull/339), [issue #337](https://github.com/bradleyayers/django-tables2/issues/337))
- Fixed an issue where `exclude` in combination with `sequence` raised a KeyError ([#341](https://github.com/bradleyayers/django-tables2/pull/341), [issue #205](https://github.com/bradleyayers/django-tables2/issues/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 in `BaseLinkColumn`-based columns. (#322)
- Pass the table instance into SingleTableMixin's get_table_pagination (#320 by [@georgema1982](https://github.com/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)
- Pass the table instance into `SingleTableMixin.get_table_pagination()` (#320 by
(@georgema1982)[https://github.com/georgema1982])
- Ability to change the body of the `<a>`-tag, by passing `text` kwarg to the columns inheriting from BaseLinkColumn (#318 by [@desecho](https://github.com/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](https://github.com/paolodina)
- Added Dutch translation.
- Fixed {% blocktrans %} template whitespace issues
- Fixed errors when using a column named `items` (#316)
- Obey `paginate_by` (from `MultipleObjectMixin`) 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 if `True` (#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 param to table.as_html()

## v1.1.0 (2016-01-19)
- Add tests for `TimeColumn`
- Remove `sortable` argument for `Table` and Column constructors and its associated methods. Deprecated since 2012.
- Remove deprecated aliases for `attrs` in `CheckboxColumn`.
- 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 when orderable=False (#204 by [@bmihelac](https://github.com/bmihelac))
- `show_header` attribute on `Table` allows disabling the header (#175 by [@kviktor](https://github.com/kviktor))
- `LinkColumn` now tries to call `get_absolute_url` on a record if no `viewname` is provided (#283, fixes #231).
- Add `request` argument to `Table.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 feb 2016 #282
- move `build_request` from `django_table2.utils` to `tests.utils` and amend tests #282

## v1.0.6 (2015-12-29)
- 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
- 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](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 (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'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.
- 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 <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.
