Skip to main content

django-listing

https://raw.githubusercontent.com/elapouya/django-listing/master/docs/_static/readme_intro1.png https://raw.githubusercontent.com/elapouya/django-listing/master/docs/_static/readme_intro2.png

Django app for building HTML listings / tables, it includes many features :

  • Any iterable, Django QuerySet or model can be used.

  • Most listings can be configured into a template file without touching a python file

  • A class-based ListingView is provided if you want to code a listing at python side

  • It as an Ajax mode to save requests to the server

  • Uses JQuery if ajax is activated

  • Customized for Bootstrap by default, but can be easily customized in many way (templates, icons, etc…)

  • You can select columns to display, columns title, default sorting etc..

  • Pagination is highly customizable (buttons to display, goto page, ellipsis, icons et labels)

  • Rows can be <div> instead of <tr>, so it is possible to format data in many ways

  • A lot of column types are provided, they are automatically created when a QuerySet or a model is provided

  • Columns are class-bases and one can create custom ones

  • Columns manage One-to-many, Many-to-many and foreign relations

  • Provides aggregation columns : sum, avg, min, max values

  • Provides page-level and global aggregation : sum, avg, min, max values displayed at listing last row

  • Provides columns to make a link to the object, a custom link, checkbox, select box, text input…

  • Provides “action column” that comes with many actions : show, edit, delete, move up, move down…

  • is able to manage multiple variations to present data in multiple way at the same place (text only listing, text+image listing, image only listing for example)

  • Uses Django translation framework : one can translate the listing as needed

  • Toolbars can be added at the top and/or at the bottom to make actions

  • Built-in toolbar action are : sorting, select a listing variation, number of rows per page, export data. They are customizable.

  • Toolbar items are class-based : one can create a custom one easily

  • django-listing can automatically create a filter form (aka search form)

  • Listing rows can be selectable in order to apply some actions

  • Listings can be editable for mass updates

  • django-listing can automatically create a form for inserting data to database

  • One can upload files/images into a listing, it uses DropzoneJS (Work in progress)

  • ListingView can manage itself database inserting, editing, deleting, filtering, uploads and actions : no need to develop any code for that.

  • django-listing comes with hundreds of icons as a scalable font

  • django-listing is faster than django-table2

Showcase

A demo is included in source code, you will need poetry to install python environment:

curl -sSL https://install.python-poetry.org | python3 -

Get the source code:

git clone https://github.com/elapouya/django-listing.git

To install the python envionment:

cd django_listing/showcase
poetry install --no-root

Check you are in showcase/ directory, then start the Django from poetry environment:

poetry run python manage.py runserver 8123

A sqlite database is already included, you do not have to make any migration, just open your brower at http://localhost:8123

Tests

The test suite uses a temporary sqlite database and needs no configuration. From the root of the repository, run:

python tests/runtests.py

To run only some tests, give their labels, for example:

python tests/runtests.py tests.test_pagination_by_pk.PkQueryTest

License

Django-listing is licensed under the GPLv3 license for all open source applications. A commercial license is required for all commercial applications or non-open applications

See LICENSE.rst file for more informations.

Documentation

Please, read the doc (Work in progress)

News

0.10.69 (2026-09-25)

  • rollback transaction if existing for catched exceptions

0.10.68 (2026-09-11)

  • AJAX requests send the CSRF token in the header Django expects (CSRF_HEADER_NAME) instead of the request body, and read it from the cookie named by the host application’s CSRF_COOKIE_NAME : a renamed cookie no longer makes django-listing post a stale csrftoken value, and GET requests do not carry the token in their URL anymore

  • When the cookie is not readable (CSRF_USE_SESSIONS or CSRF_COOKIE_HTTPONLY), the token rendered in the page by footer.html is used

  • Migration note : jQuery requests of the host application no longer carry csrfmiddlewaretoken in their body. CsrfViewMiddleware accepts the header, but a view reading request.POST["csrfmiddlewaretoken"] itself must switch to request.META[settings.CSRF_HEADER_NAME]

0.10.67 (2026-08-20)

  • Deep listing pages are now paginated on the primary keys : the page rows are first located with a light query on the primary key, then hydrated. A wide queryset (many select_related/annotations) does not have to be projected anymore on all the rows discarded by the OFFSET. Can be turned off with the new listing attribute paginate_by_pk = False. It is automatically skipped when it would not give the same rows : sequences, .values() querysets (“group by” feature), combined querysets and queries having a row-duplicating multi-valued join.

  • Listing sorting now always ends with the primary key, so that a sort on columns having ties cannot show a same row on two different pages

  • Add a test suite : python tests/runtests.py

0.10.66 (2026-07-10)

  • Add djlst_fill_attached_form() JS function

0.10.65 (2026-03-16)

  • URLs in apps.py now uses STATIC_URL from settings.py

0.10.64 (2026-03-16)

  • Fix css for listing footer on smartphones

0.10.63 (2026-01-28)

  • Fix FloatColumn

0.10.62 (2026-01-16)

  • Remove auto row select on the whole page with action xxx_all

0.10.61 (2026-01-15)

  • Add title attribute to LinkButtonToolbarItem

  • Add AutocompleteMultipleFilter and AutocompleteFilter

0.10.60 (2026-01-08)

  • Add patch_attached_form_buttons_attrs()

0.10.59 (2025-11-03)

  • Fix unchecked checkboxes in filter form

0.10.58 (2025-10-25)

  • Add JS djlst_set_form_input()

0.10.57 (2025-10-23)

  • Improve grouping

0.10.56 (2025-10-18)

  • Add manage_attached_form_mixed_response_data() management

0.10.53 (2025-10-07)

  • Fix attached form hiddens

  • Improve group by

0.10.53 (2025-10-07)

  • Fix word_search in filters

  • Fix DateField help_text

0.10.51 (2025-10-05)

  • Add LinkButtonToolbarItem

0.10.50 (2025-09-28)

  • Add default_layout_name to AttachedForm

  • Add auto_help_text to DateFilter

0.10.48 (2025-09-24)

  • Improve DateFilter

0.10.47 (2025-09-07)

  • Add no_filtering Filter attribute

0.10.46 (2025-09-05)

  • Fix filtering when an action button is pressed in an attached form

0.10.45 (2025-09-03)

  • Add attrs, is_visible and is_disabled params on ActionsButtonsColumn

0.10.44 (2025-08-25)

  • Fix group by

  • Add filter_distinct attribute

0.10.43 (2025-08-23)

  • Fix filter inside a cell

  • Better filters form reset button

0.10.42 (2025-08-19)

  • Fix Filter.default_value_func

  • Fix variation management

0.10.40 (2025-08-13)

  • Fix ManyColumn params_keys

0.10.39 (2025-07-02)

  • Fix __isnull filtering

0.10.38 (2025-06-30)

  • Fix select input id in attached form

  • Fix multi-selection values in POST

  • Add multi-selection Select2 handling

0.10.37 (2025-06-19)

  • Add form_field_serialize_func column attribute

0.10.36 (2025-06-12)

  • Add theme parameter to customize listing table header css class

0.10.35 (2025-06-05)

  • Variation number can now be set in view as attribute

0.10.34 (2025-06-01)

  • Better sequence support

0.10.33 (2025-05-19)

  • Fix bug about integer data_key

  • ChoiceFilter choices param can now be a callable

  • Fix footer aggregation

0.10.31 (2025-05-14)

  • Improve charts

0.10.30 (2025-04-24)

  • Improve charts

  • Fix selection_has_overlay bug

  • add has_first and has_last attribute to Paginator

0.10.28 (2025-04-07)

  • Add export_max_rows listing option

  • Improve number JS formating

  • Improve link_target column attribute support

0.10.27 (2025-03-26)

  • Filters form now accept virtual fields (django annotate)

0.10.26 (2025-03-25)

  • Add resolve_qs_value filter attribute

  • Fix filters form with multi-selection selects

0.10.24 (2025-03-19)

  • Add support for a specific attached form mass op clean method

0.10.23 (2025-03-10)

  • Improve django-listing events

0.10.22 (2025-03-07)

  • Fix Listing.get_view()

  • Fix attached-form enter press event that trigger bad button

0.10.20 (2025-03-05)

  • Trigger some more events to catch before/after post/file generation moment

  • Use HtmlAttributes in listing container and attached form buttons

0.10.19 (2025-03-04)

  • Improve attached form buttons

  • Fix group-by listing template

  • Fix charts labels

0.10.16 (2025-02-25)

  • fix mixed_response management

0.10.15 (2025-02-24)

  • Improve object serialization in listing

0.10.14 (2025-02-23)

  • Add dynamic attached form layout

  • Add animation on attached form layout change

0.10.12 (2025-02-18)

  • Improved Group-By

0.10.9 (2025-02-13)

  • Add TemplateColumn

  • Improve filters

0.10.7 (2025-02-11)

  • Add support for checkbox in attached form

0.10.6 (2025-02-06)

  • Send source DOM element info in post when user submit filter form

0.10.5 (2025-02-04)

  • Fix “Apply grouping” button

0.10.4 (2025-01-24)

  • Fix filters form

0.10.3 (2025-01-23)

  • Fix variation selection

0.10.2 (2025-01-21)

  • Fix filters form

0.10.1 (2025-01-17)

  • Improve form hidden fields management

0.10.0 (2025-01-07)

  • Django-listing can now generate charts with given data (no documentation yet)

0.9.18 (2025-01-01)

  • Improve group-by feature

  • Add djlst_format_digits() jquery function to have numbers with space every 3 digits

  • Add format_numbers options in Listing

  • Add update_page_records() method in Listing

  • Add default_value_func attribute to Filter object

  • Better Filter.required value handling

  • Add has_cell_filter_single column attribute

  • Improve ActionsButtonsColumn

  • Add offset_max param to avoid display lines with too high offset

  • Fix export toolbar item

  • Do not override widget attribute data-related-model in forms

  • Better filters form POST request data handling

  • Add has_nb_unfiltered_rows listing attribute

  • Accept listings with filters.form_attrs = {“method”: “POST”}

  • Bottom action buttons now works with accept_ajax=True

  • Better mass-update management

  • No form clean on mass delete in attached form

  • Add data-related-model in form fields html attributes if relevant

  • Better mass update management : now dynamic checkboxes are displayed to choose fields to update

0.8.5 (2024-09-10)

  • If using django-modeltranslation, do not consider localized fields

  • Raise exception when trying to add form errors in attached form proccessing

  • Attached form can be sticky : add class “stick” to .attached-form-container

  • Remove attached form validation errors on row selection

  • Better css for attached form

0.7.40 (2024-08-26)

  • Improve BooleanColumn to manage not nullable booleans in attached forms

  • Fix column form field parameters retrieval

  • Auto show advanced filters if one or more are used

  • Update translation

  • Add form_layout_advanced, and advanced button for filters form

  • Add object-link css class on cells in link_object_columns

  • Add extra spans in attached form buttons for better customization

  • Add title in attached form buttons

  • Better autocomplete filters management

  • Attached form buttons can now be on several lines

  • Initialize some dicts/lists in __init__

  • Give the possibility to patch json response data via listing_patch_json_response_data(data) method to be put in view

  • Better ajax request context management

  • Re-compute the current page records after processing attached form actions

  • Add view context data on ajax rendering

  • Sort SortSelectToolbarItem choices

  • Improve checkbox selection

  • Fix selection column to avoid duplicates

  • New empty msg management + some little fixes

  • Add MultipleForeignKeyFilter

  • Fix filter reset button

  • Update showcase poetry env

  • Add some manage_listing_attached_form_clean* methods

  • Fix up & down icons in SortSelectToolbarItem to be displayed on Firefox

  • Add some documentions

  • Add icons on buttons for filter form and attached form

  • Update showcase poetry.lock

  • Update showcase installation documentation

  • Many little fixes

  • Add a lot of documentation in the showcase

  • Fix django_listing.js for autocomplete multi-select

  • Add some documentation

  • Fix to get context processors executed during POST rendering

  • Add widget_class and widget_params for Filter

  • Fix widget creation

  • Fix attached form reset button

  • Add per-action attached form initial data

  • Trigger JS event on selection change

  • Add qs-first & qs-last css class on relevant rows.

  • Add AutoCompleteColumn

  • Add attached_form customize method

  • De-serialize data into UTF-8 in attached form.

  • Fix #19

  • Fix action column

  • Add export toolbar button permission

  • Add spinner while exporting listing to file

  • Check export select file format to not be empty

  • Better default listing name

  • Exported file name has now a timestamp

  • Sanitize strings for Excel export

  • Columns to be exported are now customizable

  • Use base64 for attached form serialization encoding

  • Fix attached_form auto-fill

  • Add animation on attached_form insert

  • Fix pagination

  • Improve insert button management in attached_form

  • Fix group by

  • Add ModelMethodRef and RelatedModelMethodRef

  • Add AttachedForm feature with ajax autofill and actions processing

0.6.4 (2024-01-18)

  • Improve listing insert form

  • add no_foreignkey_link to ManyColumn class

  • add range selection (press shift on second selection)

  • fix FloatColumn

  • fix gettext

  • fix group-by buttons

  • Many fixes when accept_ajax = True

  • Add “Group By” and annotations feature

0.5.17 (2023-11-28)

  • Add FloatFilter

  • Fix XSS issues on ForeignKeyColumns and LinkColumn

  • Improve get_absolute_url() usage

  • Improve default_value on Filter()

  • Add default_value on Filter()

  • Improve foreign key column title

  • Fix word search with filter_queryset_method

  • Fix listing export for Excel

  • Better focus when using Select2 widget

  • Strip HTML tags on data exports

  • Fix exception management for Django 4

  • Add add_one_day option on DateFilter

  • Fix unexpected SQL query with ListingVariations

  • Data Export works with active filters and ajax=True

  • Add filter_queryset_method filter attribute

  • Update fr translations

  • Add links in ManyColumn if get_absolute_url() exists on related objects

  • Add __url_func parameter for edit/delete/view action buttons

0.0.28 (2023-06-27)

  • Add AutocompleteMultipleForeignKeyFilter

  • Add ForeignKeyFilter and AutocompleteForeignKeyFilter

  • Added edit and delete action buttons

  • Fixed action button “see details” modal

  • Improved CSS for small device

  • Auto-detect many-to-many model fields if present in select_columns

  • Fixed choices widgets

  • Improved radio and checkbox in filter form

  • Fixed ModelColumns

  • Added LineNumberColumn()

  • Use scss to generate css files

  • Added showcase with many demo pages see showcase/README.rst

  • Fixed bad form closing

  • Fixed ListingVariation with Ajax

  • Added django-like filter syntax for sequences

  • Added JsonDateTimeColumn class

  • Added support for python 3.10

  • Added possibility to create custom action button linked with listing method

0.0.7 (2020-07-14)

  • First running version

0.0.1 (2018-02-03)

  • Skeleton commit

Release files for django-listing 0.10.69

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-listing 0.10.69
File Size Uploaded
django_listing-0.10.69.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-listing 0.10.69
File Interpreter ABI Platform
django_listing-0.10.69-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 2.2 MB

Release files / django_listing-0.10.69.tar.gz

Download URL django_listing-0.10.69.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
2566344b7819e98fa34b63ed2df45177688059e25ec65ccb9a704f24f17ec89d
BLAKE2b-256 checksum
How to use checksums
766e6a6a9183ed19b45c8239c7142ca7790c04c451ea564d1c38833cc3776200
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Release files / django_listing-0.10.69-py2.py3-none-any.whl

Download URL django_listing-0.10.69-py2.py3-none-any.whl
Size 1.1 MB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
d7daf18f6f5ecd752edebc7b4e0f35fe8c027b5e7e5c20e301937ee1954b715b
BLAKE2b-256 checksum
How to use checksums
15435bf8ddb67a61c18fa4ea2cbf1249d6c261f2a82e9b334c22765ad93d0b3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Release history Release notifications | RSS feed

This release

0.10.69 This release

2 release files

0.10.9

2 release files

0.10.8

2 release files

0.10.7

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.9.16

2 release files

0.9.15

2 release files

0.9.11

2 release files

0.9.10

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.40

2 release files

0.7.39

2 release files

0.7.37

2 release files

0.7.36

2 release files

0.7.30

2 release files

0.7.29

2 release files

0.7.28

2 release files

0.7.27

2 release files

0.7.26

2 release files

0.7.25

2 release files

0.7.24

2 release files

0.7.23

2 release files

0.7.22

2 release files

0.7.21

2 release files

0.7.20

2 release files

0.7.18

2 release files

0.7.17

2 release files

0.7.16

2 release files

0.7.15

2 release files

0.7.14

2 release files

0.7.12

2 release files

0.7.10

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.17

2 release files

0.5.16

2 release files

0.5.15

2 release files

0.5.14

2 release files

0.5.12

2 release files

0.5.11

2 release files

0.5.10

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.0.28

2 release files

0.0.27

2 release files

0.0.26

2 release files

0.0.25

2 release files

0.0.24

2 release files

0.0.23

2 release files

0.0.22

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.17

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.11

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page