flask_dtable a Full-Featured Table System made with Python by Florian Lämmlein
A simple framework for building HTML Tables for Flask.
flask_dtable Features
- HTML forms
- Column Editor
- Column replace
- Includes Datatables
- Custom column filters
- Live feedback handler
- Custom column popups
How to Install
pip install flask_dtable
flask_dtable Parameters
| Param | Description | Dict Params | Dict Description | Type | Default Value |
|---|---|---|---|---|---|
| data | Table content as an list of str | list | [[]] |
||
| section | Datareplacements by an position index | active | Status of the current function | bool | False |
| position | Replacement position as int (by data index) | ​list, (int, str ('_sec')) |
[] |
||
| value | Replacement value as (str or current data value) | list, (list, str ('_var')) |
[[]] |
||
| check | Data replacement check as function (by data index) | list | [[]] |
||
| header | Table Header names as an list of str | value | Table header Names as str | list | [] |
| class | Table header class | str | None |
||
| id | Table header id | str | None |
||
| footer | Table Footer names as an list of str | active | Status of the current function | bool | False |
| value | Table footer Names as str | list | [] |
||
| class | Table footer class | str | None |
||
| id | Table footer id | str | None |
||
| calculate | Table calculate function by index from column | list, int | [] |
||
| decimal_places | Table calculate precision numbers | int | 2 |
||
| form | Data Column Editor | active | Status of the current function | bool | False |
| position | Form position as int (by data index) | ​list, (int, str ('_sec')) |
[] |
||
| action | From action | ​str, list ('_tab', int) |
None |
||
| class | From class | str | None |
||
| tooltip_text | From submit button tooltip text as str | ​list, str | [] |
||
| button_color | From submit button color as str | ​list, str | [] |
||
| icon | From submit button icon as str | ​list, str | [] |
||
| request_out | Form fields outside the form as list, str | dict |
{} |
||
| request_in | Form fields inside the form as list, str | ​dict |
{} |
||
| script | Datatables script tag | active | Status of the current function | bool | False |
| responsive | Status of the responsive function | ​​bool | False |
||
| fixed | Set fixed columns (by data index) | int | None |
||
| order | Column orders ([1, 'asc'], [1, 'desc']) |
​list, (int, str ('asc', 'desc')) |
[] |
||
| length_menu | Enable/Disable the length menu | bool | True |
||
| buttons | Table buttons as dicts | list |
[] |
||
| child_rows | Child rows as dicts | list |
[] |
||
| live_feed | Live feedback as dicts | dict |
{} |
||
| editor | Tableeditor script tag | active | Status of the current function | bool | False |
| action | HTML form action | str | None |
||
| label | Editor Modal display Name | str | None |
||
| size | Editor Modal display size ('small', 'large') |
str | small |
||
| fields | Editor fields as dicts | list |
[] |
||
| order | Editor div order as lists | list |
[] |
||
| chars | Editor field value chars replace as functions | dict |
{} |
||
| popup | New window popup on tr click |
active | Status of the current function | bool | False |
| url | Window main url | str | None |
||
| width | Popup window width | int | 1600 |
||
| height | Popup window height | int | 1000 |
||
| params | Window url parameters set name as str and value (by data index) | list, list (str, int) | [[]] |
||
flask_dtable Special Parameters
| Main Param | Param | Dict Param | Description | Type | Default Value |
|---|---|---|---|---|---|
| ​form | request_out | request_name | Datafield name | list, str | [] |
| request_id | Datafield id | ​list, str | [] |
||
| rquest_value | Datafield value (by data index or ('_sec')) |
​list, str | [] |
||
| value | Datafield replacement value if '_sec' is set |
​list, list, str | [[]] |
||
| check | Datafield replacement check as function (by data index) | ​list, list, str | [[]] |
||
| request_out | request_name | Datafield name | list, str | [] |
|
| request_id | Datafield id | ​list, str | [] |
||
| rquest_value | Datafield value (by data index or ('_sec')) |
​list, str | [] |
||
| value | Datafield replacement value if '_sec' is set |
​list, list, str | [[]] |
||
| check | Datafield replacement check as function (by data index) | ​list, list, str | [[]] |
||
| script | buttons | button_name | Holds the display name from the buttons | str | Actions |
| export | Export buttons ('pdf', 'excel', 'csv') |
​list, str | [] |
||
| hidde | Set the hidde button | ​bool | False |
||
| nohidde | Don´t hidde this columns (by column index) | list, int | [] |
||
| filter | Set the filter button (by column index) | list, int | [] |
||
| custom_filter | Set custom filters as dicts | list, dict | [] |
||
| data_filter | Set data filters (creates url get parameters) as dicts | list, dict | [] |
||
| custom_filter | name | Display name from filter | str | None |
|
| labels | Display values from filter row | list, str | [] |
||
| values | Check the values (by the data section as str) | list, str | [] |
||
| data_filter | name | Display name from filter | str | None |
|
| labels | Display values from filter row | list, str | [] |
||
| values | Check the values (by the data section as str) | list, str | [] |
||
| child_rows | label | Display name from child row | str | None |
|
| column | Display value from child row (by data index) | int | None |
||
| live_feed | label | Display name from live feedback | str | None |
|
| column | Fallback value from child row (by data index) | int | 0 |
||
| update | Set data filters (creates ajax post parameters) | dict | {} |
||
| handler | Set data filters live handler (creates ajax post) as dicts | dict | {} |
||
| update | url | Ajax url to an blueprint | str | None |
|
| value | Ajax post values (by data index) | str | None |
||
| handler | type | Ajax update input type | str | None |
|
| post | Ajax update post id, name | str | None |
||
| column | Ajax update column (by data index) | str | None |
||
| editor | fields | label | Display form field name | str | None |
| column | Display form field value (by column index) | int | 0 |
||
| check | Field value to check only if type is radio | int | 1 |
||
| class | Display form field class | ​str | None |
||
| name | Display form field name | str | None |
||
| id | Display form field id | str | None |
||
| type | Display form field type | str | None |
||
| required | Field required check | ​bool | False |
||
| disabled | Field disabled check | ​bool | False |
||
| hidden | Field hidden check | ​bool | False |
||
| order | index | div order index (How many fields in one div are shown) | int | 2 |
|
| index_lower | div order index (if index is to short index_lower is active) | int | 2 |
||
| class | div order classes | str | col-md-12 col-lg-6 |
||
| class_lower | div order classes (if index_lower is active class_lower is set) | str | col-md-12 col-lg-12 |
||
| chars | Field replace tags (special characters) as functions | {ord('ä'):'ae',ord('ü'):'ue',ord('ö'):'oe'} |
|||
flask_dtable Examples
Basic usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag"
]
}
)
Datatables usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag"
]
},
script = {
"active": True
}
)
Datareplacement usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
section = {
"active": True,
"position": [0, "_sec"],
"value": [
['Kein Geburtstag', ['_var', 1]]
],
"check": [
['data[1] == "02.11.2001"']
]
},
header = {
"value": [
"Name",
"Geburtstag"
]
},
script = {
"active": True
}
)
Data editor usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag"
]
},
script = {
"active": True
},
editor = {
"active": True,
"fields": [
{
"label": "Name",
"column": 0,
"disabled": True
},
{
"label": "Geburtstag",
"column": 1,
"required": True
}
]
}
)
Child rows usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag"
]
},
script = {
"active": True,
"child_rows": [
{
"label": "Zusatz",
"column": 2
}
]
}
)
Datatable order usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag",
"Zusatz"
]
},
script = {
"active": True,
"order": [
[0, 'asc'],
[1, 'asc']
]
}
)
Datatable button usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag",
"Zusatz"
]
},
script = {
"active": True,
"buttons": {
"export": ['pdf', 'excel']
}
}
)
Datatable filter button usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag",
"Zusatz"
]
},
script = {
"active": True,
"buttons": {
"filter": [0,2]
}
}
)
Datatable filter button with custom filter usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag",
"Zusatz"
]
},
script = {
"active": True,
"buttons": {
"custom_filter": [
{
"name": "Geburtstag",
"labels": ["November"],
"values": ["data[1].split('.')[1] == '11'"]
}
]
}
}
)
Datatable filter button with data filter usage:
flask_dtable(
data = [
['Niklas', '13.09.2000', 'Hallo Welt 1'],
['Peter', '02.11.2001', 'Hallo Welt 2']
],
header = {
"value": [
"Name",
"Geburtstag",
"Zusatz"
]
},
script = {
"active": True,
"buttons": {
"data_filter": [
{
"name": "Geburtstag",
"labels": ["November", "Dezember"],
"values": ["11", "12"]
}
]
}
}
)
Form basic usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag",
"Action:"
]
},
form = {
"active": True,
"action": "/submit_page",
"position": 2,
"request_in": {
"request_name": "name",
"request_value": 0
}
},
script = {
"active": True
}
)
Form data replacement usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag",
"Action:"
]
},
form = {
"active": True,
"action": "/submit_page",
"position": 2,
"request_in": {
"request_name": ["name", "birthday"],
"request_value": [0, "_sec"]
},
"value": [
["Kein Geburtstag", ["_var", 1]]
],
"check": [
["data[1] == '02.11.2001'"]
]
},
script = {
"active": True
}
)
Live feedback usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag"
]
},
script = {
"active": True,
"live_feed": {
"label": "Mein Geburtstag",
"column": 1,
"update": {
"url": "preview",
"value": [
{"post": "birthday", "column": 1}
]
}
}
}
)
Popup usage:
flask_dtable(
data = [
['Niklas', '13.09.2000'],
['Peter', '02.11.2001']
],
header = {
"value": [
"Name",
"Geburtstag"
]
},
popup = {
"active": True,
"url": "/edit",
"params": [
["birthday", 1]
]
}
)
Legacy versions
This version of the flask_dtable are the acctual stable version which is compatible with Python 3+ and is supported for feature updates.
Do you have any Ideas, Changes or Bugs ?
Please let me know in the Comments, i will try to fix or add waht you found/want :D
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file flask_dtable-1.0.0.tar.gz.
File metadata
- Download URL: flask_dtable-1.0.0.tar.gz
- Upload date:
- Size: 21.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.1.3 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98368a23fde592df2d50762589246ede83e49de7c54e222adf8a17243bddc2c7
|
|
| MD5 |
2c32b2ff548ebfe1801ffdaef26cf74c
|
|
| BLAKE2b-256 |
55b2b7ee566072b88b892bb18b12b2b9ab2211fdf1e8cbaf98066adde088989c
|