Quickstart

First place table definition into views.py:

from django.shortcuts import render
from sitetables.plugins.i18n import I18nPlugin
from sitetables.plugins.style.bootstrap4 import Bootstrap4Plugin
from sitetables.toolbox import Table

from .models import Entries


def entries(request):
    # We create client-side handled table from entries queryset,
    table_entries = Table(
        source=Entries.objects.filter(hidden=False),
        # We also activate some plugins.
        plugins=[
            I18nPlugin(),
            Bootstrap4Plugin(),
        ],
    )
    return render(request, 'entries.html', {'table_entries': table_entries})

Next create page template entries.html:

{% load sitetables %}

<!-- The following line usually goes into head tag. It'll load all needed css. -->
{% sitetables_css table_entries %}

<!-- The following resides in body tag. Note that in this scenario
     thead and tbody will be populated using JS automatically. -->
<table id="table-entries" class="table table-striped table-condensed">
    <thead></thead><tbody></tbody>
</table>

<script type="text/javascript">
     $(function() {
         <!-- Initialize table using generated config.
              The following demonstrates how you can extend generated
              configuration. -->
         $('#table-entries').dataTable($.extend({},
             {% sitetable_config table_entries %},
             {
                 pagingType: 'full_numbers',
                 lengthChange: false,
             }
         ));

     });
 </script>

<!-- The following line usually goes somewhere near the end of the body.
     It'll load all needed js. -->
{% sitetables_js table_entries %}

Serverside tables

You can instruct sitetables to not to pour all table data to client, but to fetch it from server when needed. For that pass on_server=True to Table:

table_entries = Table(source=Entries, on_server=True)

Addressing tables by name

One may not spawn a table for each request, but create named table and address it by its name:

ENTRIES_TABLE_NAME = 'entries'
Table(source=Entries, name=ENTRIES_TABLE_NAME)

def entries(request):
    return render(request, 'entries.html', {'table_entries': ENTRIES_TABLE_NAME})