Python web application framework for building reactive analytical web apps without JavaScript
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Dash supports single-page application (SPA) navigation with automatic routing, page registration, and SEO optimization. Multi-page apps enable building complex applications with multiple views and URL-based navigation.
Register pages for automatic routing and navigation.
def register_page(
module: str = None,
path: str = None,
path_template: str = None,
name: str = None,
order: Union[int, float] = None,
title: str = None,
description: str = None,
image: str = None,
redirect_from: List[str] = None,
layout: Any = None,
**kwargs
):
"""
Register a page for multi-page navigation.
Parameters:
- module: Module name (auto-detected if called from page file)
- path: URL path for the page (default: based on module name)
- path_template: URL template with variables (e.g., '/user/<user_id>')
- name: Display name for navigation
- title: HTML page title
- description: Meta description for SEO
- image: Meta image for social sharing
- redirect_from: List of paths that redirect to this page
- layout: Page layout function or component
"""Access registered pages and their metadata.
page_registry: Dict[str, PageConfig] = {
'module_name': {
'module': 'pages.home',
'path': '/',
'path_template': None,
'name': 'Home',
'title': 'Home Page',
'description': 'Application home page',
'order': 0,
'layout': <layout_function>,
'supplied_name': 'Home',
'supplied_path': '/',
'supplied_title': 'Home Page'
}
}Container component that renders the current page content.
page_container: Component # Container for current page contentapp.py:
from dash import Dash, html
import dash
app = Dash(__name__, use_pages=True)
app.layout = html.Div([
html.Div([
html.Div([
html.A(f"{page['name']}", href=page["relative_path"])
for page in dash.page_registry.values()
]),
]),
dash.page_container
])
if __name__ == '__main__':
app.run(debug=True)pages/home.py:
import dash
from dash import html
dash.register_page(__name__, path='/', name='Home')
layout = html.Div([
html.H1('Home Page'),
html.P('Welcome to our application!')
])pages/analytics.py:
import dash
from dash import html, dcc, callback, Input, Output
dash.register_page(
__name__,
path='/analytics',
name='Analytics',
title='Analytics Dashboard',
description='View application analytics and metrics'
)
layout = html.Div([
html.H1('Analytics Dashboard'),
dcc.Graph(id='analytics-chart')
])
@callback(
Output('analytics-chart', 'figure'),
Input('analytics-chart', 'id')
)
def update_chart(_):
# Chart logic here
return {'data': [], 'layout': {}}pages/user_profile.py:
import dash
from dash import html, callback, Input, Output
dash.register_page(
__name__,
path_template='/user/<user_id>',
name='User Profile'
)
def layout(user_id=None, **kwargs):
return html.Div([
html.H1(f'User Profile: {user_id}'),
html.Div(id='user-content')
])
@callback(
Output('user-content', 'children'),
Input('url', 'pathname') # Assuming dcc.Location with id='url'
)
def display_user(pathname):
user_id = pathname.split('/')[-1]
return f'Loading data for user {user_id}...'from dash import html, dcc
import dash
def create_navbar():
return html.Nav([
html.Ul([
html.Li([
dcc.Link(
page['name'],
href=page['relative_path'],
className='nav-link'
)
]) for page in dash.page_registry.values()
], className='nav-list')
], className='navbar')
app.layout = html.Div([
create_navbar(),
dash.page_container
])import dash
from dash import html
dash.register_page(
__name__,
path='/about',
name='About Us',
title='About Our Company - Best Data Solutions',
description='Learn about our mission to provide the best data analytics solutions for businesses worldwide.',
image='https://example.com/about-image.png'
)
layout = html.Div([
html.H1('About Our Company'),
html.P('We are a leading provider of data analytics solutions...'),
])PageConfig = Dict[str, Any] # Page configuration dictionary
PageRegistry = Dict[str, PageConfig] # Registry of all pages
LayoutFunction = Callable[..., Component] # Page layout function
PageMetadata = Dict[str, Union[str, int, float, List[str]]] # Page metadataInstall with Tessl CLI
npx tessl i tessl/pypi-dash