Class Based Generic Mixins — django-tables2 1.4.1 documentation

# Class Based Generic Mixins

Django-tables2 comes with two class based view mixins: `SingleTableMixin` and `MultiTableMixin`.

## A single table using `SingleTableMixin`

`SingleTableMixin` makes it trivial to incorporate a table into a view or template.

The following view parameters are supported:

- `table_class` –- the table class to use, e.g. `SimpleTable`
- `table_data` (or `get_table_data()`) – the data used to populate the table
- `context_table_name` – the name of template variable containing the table object
- `table_pagination` (or `get_table_pagination`) – pagination options to pass to `RequestConfig`. Set `table_pagination=False` to disable pagination.
- `get_table_kwargs()` allows the keyword arguments passed to the `Table`
    constructor.

For example:

    from django_tables2 import SingleTableView

    class Person(models.Model):
        first_name = models.CharField(max_length=200)
        last_name = models.CharField(max_length=200)

    class PersonTable(tables.Table):
        class Meta:
            model = Person

    class PersonList(SingleTableView):
        model = Person
        table_class = PersonTable

The template could then be as simple as:

    {% load render_table from django_tables2 %}
    {% render_table table %}

Such little code is possible due to the example above taking advantage of default values and `SingleTableMixin`‘s eagerness at finding data sources when one isn’t explicitly defined.

Note

You don’t have to base your view on `ListView`, you’re able to mix `SingleTableMixin` directly.

## Multiple tables using `MultipleObjectMixin`

If you need more than one table in a single view you can use `MultiTableMixin`. It manages multiple tables for you and takes care of adding the appropriate prefixes for them. Just define a list of tables in the tables attribute:

    from django_tables2 import MultiTableMixin
    from django.views.generic.base import TemplateView

    class PersonTablesView(MultiTableMixin, TemplateView):
        template_name = 'multiTable.html'
        tables = [
            PersonTable(qs),
            PersonTable(qs, exclude=('country', ))
        ]

        table_pagination = {
            'per_page': 10
        }

In the template, you get a variable `tables`, which you can loop over like this:

    {% for table in tables %}
        {% render_table table %}
    {% endfor %}