Django AJAX ModelForms. Read-only display ModelForms. Django AJAX datatables with CRUD and custom actions. Supports Django Templates.
Project description
Screenshot of the sample project:
More screenshots with descriptions are available at: https://github.com/Dmitri-Sintsov/djk-sample/wiki
Documentation (in development): https://django-jinja-knockout.readthedocs.org/
Supports Django 4.2 LTS, 5.0; Python 3.10 / 3.11 / 3.12.
Please contribute to the localization of the project:
Localization:
Chinese: goldmonkey
Dutch: Melvyn Sopacua
Polish: pawelkoston
Spanish: Julio Cesar Cabrera Cabrera, kiwnix
Key features
AJAX based django.admin-like paginated datatables (grids) with sorting / filters and custom actions.
Integrates Jinja2 into existing Django templates (DTL).
Bootstrap 3 / Bootstrap 4 / Bootstrap 5 / Jinja2 / Knockout.js for Django projects.
No deep knowledge of Knockout.js is required: it has ready working components.
Dynamic adding / removing of inline formsets with Knockout.js, protected from XSS.
Default template renderers for Django forms / related forms / inline formsets with the possibility to override these to customize the visual layout.
ForeignKeyGridWidget provides ForeignKeyRawIdWidget-like functionality to select ModelForm foreign key field value via AJAX query / response.
Django raw queries with filter() / exclude() / order() / values() / values_list() and SQL slicing support via FilteredRawQuerySet, suitable for usage in ListView / ListSortingView / KoGridView derived classes.
ListQuerySet to query Python lists, including prefetch_related() results.
Jinja2 templates can be integrated into existing Django templates via custom template library tag:
{% extends 'base_min.html' %} {% load jinja %} {% load static %} {% block main %} {% jinja 'bs_list.htm' with _render_=1 view=view object_list=object_list is_paginated=is_paginated page_obj=page_obj %} {% endblock main %}
Overview
Knockout.js uses unobtrusive data-bind HTML attributes with JSON-like values with causes no conflict to server-side double braces template syntax of DTL / Jinja2: no need to escape templates.
Combining client-side Knockout.js templates and server-side Jinja2 templates allows to write more powerful and compact template code.
Jinja2 is faster and is more powerful than built-in DTL templates. Jinja2 templates may be called from DTL templates by using custom template tag library {% load jinja %}.
Uses
Provides DTL tag library to include Jinja2 templates into DTL templates.
Knockout.js is used to provide datatables and for XSS-safe empty_form handling.
AJAX form validation, AJAX viewmodels response routing are implemented via bundled client-side scripts.
It’s not a pure SPA framework, but a mixed approach of server-side pages with embedded AJAX content and client-side scripts. Although it may be used for SPA as well. Classical Web applications aren’t “outdated” in any way - because such applications are much better indexable by web crawlers, Python is better language than Javascript in general, also server-side rendering generally is more robust.
Version 2.2.1
Python 3.12 / Django 5.0 compatibility.
Use axios instead of outdated jQuery.form plugin.
Version 2.2.0
FormFieldsRenderer / fields_template allows fine-grained customization of ModelForm fields layout.
ListQuerySet now has basic support of .delete() method and most common aggregate functions: Count, Min, Max, Sum.
Load jQuery.form / Moment.js / Bootstrap Datetimepicker as es6 modules, which may be included into django_deno generated bundle.
QueryString wrapper for UrlSearchParams.
Additional KoGridView client-side layout options:
Bootstrap navs style of Grid filter choices: ko_grid_navs_filter_choices
showNonSortableColumnNames option
button_pagination built-in action type
Nested components are supported in Grid cells, including the cells of Compound columns.
Tpl.domTemplate optional template kwargs support.
djk_bootstrap5 now uses native Bootstrap Icons font for iconui actions.
Various bugfixes.
Version 2.1.0
Built-in custom elements, including es5 IE11 polyfills.
Bootstrap 5 compatibility.
ObjDict Django model serializer with built-in field permissions check for AJAX viewmodels, including datatables.
get_absolute_url with optional user permission check / link title generation.
Version 2.0.0
Built-in es6 modules support for modern browsers.
Optional SystemJS loader support for IE11 via django_deno.
Optional minified terser bundles support both for es6 modules and for SystemJS loader via django_deno.
datatables support separate cell click actions, not just row actions.
More throughout support for datatables annotated fields / virtual fields via grid_fields dicts.
Optional lazy registration of client-side components.
Numerous fixes, including improved related grid view kwargs auto-detection, see pageRouteKwargsKeys and pageRouteKwargsKeys example.
ListRangeFilter for ListSortingView range fields.
Documentation
The full documentation is at https://django-jinja-knockout.readthedocs.org.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_jinja_knockout-2.2.1-py2.py3-none-any.whl
.
File metadata
- Download URL: django_jinja_knockout-2.2.1-py2.py3-none-any.whl
- Upload date:
- Size: 854.1 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 129a03b85709c60382a1cfbfbe6bca9a76c25f68dc2074fc160ac0ae05ab9d1a |
|
MD5 | 45957ec2a58504a41c0b0eb54a7b7548 |
|
BLAKE2b-256 | 3a2273f72c70c49752eb2286246750082836b05892bb6062efffe505714bf3aa |