CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-dash

Python web application framework for building reactive analytical web apps without JavaScript

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

multi-page-apps.mddocs/

Multi-Page Applications

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.

Capabilities

Page Registration

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
    """

Page Registry

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'
    }
}

Page Container

Container component that renders the current page content.

page_container: Component  # Container for current page content

Usage Examples

Basic Multi-Page App

app.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': {}}

Path Templates and Variables

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}...'

Custom Navigation

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
])

Page with SEO Metadata

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...'),
])

Types

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 metadata

Install with Tessl CLI

npx tessl i tessl/pypi-dash

docs

asset-management.md

background-callbacks.md

callback-system.md

component-libraries.md

core-application.md

index.md

multi-page-apps.md

special-values.md

tile.json