..
Copyright (c) 2026 Varun Sharma
SPDX-License-Identifier: MIT
Configuration
#############
DataTables comes with many `options `__.
By default, no options are set.
.. _global_options:
Global options
**************
If you want to change any of the options for *all* tables, use the ``datatables_options``
configuration option in ``conf.py``.
For example, to set the `internationalization plugin `__:
.. code-block:: python
# in conf.py
datatables_options = {
"language": {
"url": "https://cdn.datatables.net/plug-ins/${datatables_version}/i18n/fr-FR.json"
}
}
# this is equivalent to JavaScript:
datatables_options = """
{
language: {
url: 'https://cdn.datatables.net/plug-ins/${datatables_version}/i18n/fr-FR.json,'
},
}"""
You can use the special variable ``${datatables_version}`` to dynamically set the DataTables version in URLs (which is substituted by ``datatables_version`` configuration value from ``conf.py``).
If it's a dictionary, then it is converted to JSON with `json.dumps `__ and passed to the JavaScript DataTables constructor.
If it's a string, it will be passed as is, so it will need to be a valid JavaScript string.
You can set any options you want, but make sure to follow the DataTables documentation for the correct format.
For example, if you want to set the ``pageLength`` option to ``-1`` (i.e., show all content), plus rename that option to ``Show all``, you would do it like this:
.. code-block:: python
# in conf.py
# as a dictionary
datatables_options = {
"pageLength": -1,
"language": {"lengthLabels": {"-1": "Show all"}},
"lengthMenu": [10, 25, 50, -1],
}
# as plain JavaScript in a string
datatables_options = """{
pageLength: -1,
language: {
lengthLabels: {
'-1': 'Show all'
}
},
lengthMenu: [10, 25, 50, -1]
}"""
.. _directives:
Directives
**********
In addition to setting global options in ``conf.py``, the following directives
allow for configuring tables by DOM
`selector `__;
this can be:
* an ``#id``
* a ``.class``
* a more complex ``[attribute="selector"]``
* or a comma-separated list of any of the above
Each table will inherit the global defaults from ``datatables_options``, but can
override or add any further options.
.. note:: Selectors should be unique on a given page.
If a directive selector overlaps
with another selector, only the first one defined will take effect. This
includes the default selector generated from ``datatables_class``, which will
always resolve first.
``datatables-json``
===================
Configure the tables on a page by providing a selector and any other values via
valid JSON.
.. code-block:: rst
.. datatables-json:: table.custom-table
{
"searching": false
}
.. _path-option:
``:path:``
----------
Use the ``:path:`` option to load ``DataTables`` options from
a JSON file at build time.
.. code-block:: rst
.. datatables-json:: table.custom-table
:path: ../path/to/data/tables.json
``datatables-toml``
===================
Configure the tables on a page by providing a selector and any other values via
valid TOML. The :ref:`path-option` option is also supported.
.. code-block:: rst
.. datatables-toml:: table.another-custom-table, table.still-another-selector
searching = false
.. note::
This requires Python 3.11+, or the ``tomli`` library.
``datatables-js``
=================
Configure the tables on a page by providing a selector and any other
values via JavaScript. The :ref:`path-option` option is also supported.
.. code-block:: rst
.. datatables-js:: table.yet-another-custom-table
{searching: false}
JavaScript provided this way must be an expression which returns a ``DataTable``
options object. For highly dynamic code, use an "immediately invoked function expression",
or `IIFE `__:
.. code-block:: rst
.. datatables-js:: table.custom-table
;(function() {
return { searching: !!0 };
}).call(this)
Custom assets
*************
The default JavaScript and CSS assets are fetched from ``https://cdn.datatables.net``
at page load time, without any plugins enabled.
To start building custom bundles, use the three step
`download builder `__
which provides, among other things:
* styles for CSS frameworks, such as Bootstrap
* enhanced search behavior
* customized download formats, including PDF
After making selections in step one and two, use one of the download techniques
in step three, and configure the ``datatables_js`` and ``datables_css`` options:
* Get remote URLs to load dynamic assets from `CDN`
.. code-block:: python
# conf.py
datables_css = "https://cdn.datatables.net/v/dt/dt-2.3.5/datatables.min.css"
datables_js = "https://cdn.datatables.net/v/dt/dt-2.3.5/datatables.min.js"
* `Download` a ``.zip`` file and place the unzipped contents somewhere on ``html_static_paths``,
conventionally `_static/vendor/datatables`
.. code-block:: python
# conf.py
html_static_paths = ["_static"]
datables_css = "vendor/datatables/datatables.min.css"
datables_js = "vendor/datatables/datatables.min.js"
* Use one of the more advanced package manager approaches, such as ``npm``,
if appropriate for your site. These generated locations for ``datatables_js``
and ``datatable_css`` will vary based on the tool.