html2dash
Write your dash layout in html/xml form.
Why does this package exist?
Dash is a great framework for building web apps using only python (no html/css/ javascript). If you have used dash long enough, you must have noticed some of the following.
- For larger layouts, the python code becomes very long and hard to read.
- Sometimes I get the html form of a class (like pandas dataframe), but I cannot easily display that in dash.
- Use html from markdown parsers
- Cannot copy paste html code from examples on the web.
- Cannot use tools like emmet to generate html code.
html2dash solves these problems by allowing you to write your dash layout in html/xml form. It converts the html/xml code to equivalent dash layout code.
Installation
pip install html2dash
Examples
Here is a simple example:
from dash import Dash
from html2dash import html2dash
app = Dash(__name__)
layout = """
<div>
<h1>Hello World</h1>
<p>This is a paragraph</p>
<div>
<h2>Subheading</h2>
<p>Another paragraph</p>
</div>
</div>
"""
app.layout = html2dash(layout)
You can define attributes like id, class, style etc. These
will be converted to equivalent dash attributes. For example:
layout = """
<div id="my-div" class="my-class" style="color: red;">
<h1>Hello World</h1>
<p>This is a paragraph</p>
<div>
<h2>Subheading</h2>
<p>Another paragraph</p>
</div>
</div>
"""
This is equivalent to:
layout = html.Div(
id="my-div",
className="my-class",
style={"color": "red"},
children=[
html.H1("Hello World"),
html.P("This is a paragraph"),
html.Div(
children=[
html.H2("Subheading"),
html.P("Another paragraph"),
]
)
]
)
You can use any html tag that appears in dash.html module. If html2dash does
not find the tag in dash.html, it will search in the dash.dcc module.
from html2dash import html2dash
layout = html2dash("""
<div>
<h1>Hello World</h1>
<p>This is a paragraph</p>
<Input id="my-input" value="Hello World" />
</div>
""")
Here, Input is not found in dash.html module. So, it will search in dash.dcc
module and find dcc.Input and convert it to dcc.Input(id="my-input", value="Hello World").
The order in which html2dash searches for tags is:
dash.htmldash.dcc
You can add additional component libraries to the module list as follows.
from html2dash import html2dash, settings
import dash_mantine_components as dmc
# settings["modules"] is a list of modules to search for tags.
# Default value is [html, dcc]
settings["modules"].append(dmc)
layout = html2dash("""
<div>
<h1>Hello World</h1>
<p>This is a paragraph</p>
<div>
<Badge>Default</Badge>
<Badge variant="outline">Outline</Badge>
</div>
</div>
""")
You can also map html tags to dash components. For example, if you dont want to
use <icon> tag, you can map it to DashIconify as follows.
from html2dash import html2dash, settings
from dash_iconify import DashIconify
settings["element-map"]["icon"] = DashIconify
layout = html2dash("""
<div>
<h1>Icon example</h1>
<icon icon="mdi:home"/>
</div>
""")
Display a pandas dataframe in dash
Since pandas dataframes come with a to_html method, you can easily display
them in dash using html2dash.
import pandas as pd
from html2dash import html2dash
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
layout = html2dash(df.to_html())
If you want to use dash_mantine_components to display the dataframe, you can
do the following.
import pandas as pd
from html2dash import html2dash, settings
import dash_mantine_components as dmc
# <table> would have been mapped to dash.html.Table
# But, we want to use dmc.Table instead.
settings["element-map"]["table"] = dmc.Table
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
layout = html2dash(df.to_html())
html2dash can handle multi-index dataframes as well.
import pandas as pd
from html2dash import html2dash, settings
import dash_mantine_components as dmc
settings["element-map"]["table"] = dmc.Table
df = pd.DataFrame(
{
("a", "b"): [1, 2, 3],
("a", "c"): [4, 5, 6],
("d", "e"): [7, 8, 9],
}
)
layout = html2dash(df.to_html())
Case sensitivity of html tags
html tags are case insensitive. So, <div> and <DIV> are equivalent. But,
html2dash is partly case sensitive. For any tag, it first tries to find the tag
with the given case. If it does not find the tag, it tries to find the tag with
the first letter capitalized.
For example, if you have the following layout:
layout = html2dash("""
<div>
<h1>Hello World</h1>
<p>This is a paragraph</p>
<input id="my-input" value="Hello World"/>
</div>
""")
In the above, all tags except input are found in dash.html module.
And for input tag, the following will be the sequence of searches:
- Search for
inputindash.html>> Not found - Search for
Inputindash.html>> Not found - Search for
inputindash.dcc>> Not found - Search for
Inputindash.dcc>> Found
Metadata
Release files for html2dash 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| html2dash-0.2.4.tar.gz | 6.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| html2dash-0.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.5 kB
Release files / html2dash-0.2.4.tar.gz
| Download URL | html2dash-0.2.4.tar.gz |
|---|---|
| Size | 6.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b83176dbd1fac3365f67eae87384c7307c1acd96ee4cd0406d2d1bb6191c1ff
|
|
BLAKE2b-256 checksum How to use checksums |
930050658f32ab96325943193b4fd5e9e9d5b77a5855f09a19437b31978d3a2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|
Release files / html2dash-0.2.4-py3-none-any.whl
| Download URL | html2dash-0.2.4-py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5c2b004d071f408543716755593ba2fa25bd7aa3d32a1d38679958d6b5d400b5
|
|
BLAKE2b-256 checksum How to use checksums |
47c15afba0ec24494ef26ab38e771659f07f27830ef9404128c92625f7b117a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|
Security for html2dash 0.2.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.