Menu
This section demonstrates how to define menu items using the SBAdminRoleConfiguration class.
Defining Menu Items
To create a custom menu, define a list of SBAdminMenuItem instances and pass them to SBAdminRoleConfiguration.
sb_admin_configuration.py
config = SBAdminRoleConfiguration(
default_view=SBAdminMenuItem(view_id="dashboard"),
menu_items=[
SBAdminMenuItem(view_id="dashboard", icon="All-application"),
SBAdminMenuItem(view_id="catalog_product", icon="List-checkbox", label="Catalog",
sub_items=[SBAdminMenuItem(view_id="catalog_category"),
SBAdminMenuItem(view_id="catalog_manufacturer"),
SBAdminMenuItem(view_id="catalog_product")
]
)
],
registered_views=[...],
)
Each SBAdminMenuItem accepts the following key parameters:
view_id: Unique identifier of the view this item links to.icon(optional): The icon name from Available icons.label(optional): Overrides the default label.url(optional): Custom URL for the menu item. Can be a string or a callable(request) -> str. When provided, this URL is used instead of the auto-generated URL fromview_id. Useful for linking to external pages or custom views not registered in SBAdmin.sub_items(optional): A list of nested SBAdminMenuItem objects, supporting menu nesting.
sb_admin_configuration.py
# Link to an external URL
SBAdminMenuItem(label="Documentation", icon="Help", url="https://docs.example.com")
# Dynamic URL based on request
SBAdminMenuItem(label="Profile", icon="User-business", url=lambda request: f"/users/{request.user.pk}/")
SBAdminRoleConfiguration Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
default_view | SBAdminMenuItem | None | The default view shown after login |
menu_items | list | [] | List of SBAdminMenuItem instances for the sidebar menu |
registered_views | list | [] | Additional views to register (e.g., SBAdminDashboardView) |
global_filter_form | Form class | None | Django form class for global sidebar filters |
filters_version | FilterVersions | FILTERS_VERSION_1 | Filter UI version — use FilterVersions.FILTERS_VERSION_2 for advanced filters |
default_color_scheme | ColorScheme | ColorScheme.AUTO | Default color scheme (ColorScheme.AUTO, ColorScheme.LIGHT, or ColorScheme.DARK) |
login_view_class | View class | LoginView | Custom login view class |
admin_title | str | "SBAdmin" | Title displayed in the admin header |
sb_admin_configuration.py
from django_smartbase_admin.engine.configuration import SBAdminRoleConfiguration
from django_smartbase_admin.engine.const import FilterVersions
from django_smartbase_admin.models import ColorScheme
config = SBAdminRoleConfiguration(
default_view=SBAdminMenuItem(view_id="dashboard"),
menu_items=[...],
registered_views=[...],
default_color_scheme=ColorScheme.LIGHT,
admin_title="My Admin",
filters_version=FilterVersions.FILTERS_VERSION_2,
)
Role-Based Menu Configuration
You can define different menus for different user roles by extending SBAdminRoleConfiguration and using get_configuration_for_roles in your SBAdminConfiguration.
Step 1: Define Menu Variants
sb_admin_configuration.py
admin_menu_items = [
SBAdminMenuItem(view_id="dashboard", icon="All-application"),
SBAdminMenuItem(
label="Catalog",
icon="Box",
sub_items=[
SBAdminMenuItem(view_id="catalog_product", label="Products"),
SBAdminMenuItem(view_id="catalog_category", label="Categories"),
SBAdminMenuItem(view_id="catalog_manufacturer", label="Manufacturers"),
],
),
SBAdminMenuItem(view_id="catalog_product", label="List View", icon="List-checkbox"),
SBAdminMenuItem(view_id="catalog_purchase", label="Advanced filters", icon="Filter"),
]
editor_menu_items = [
SBAdminMenuItem(view_id="catalog_product", icon="List-checkbox", label="List View"),
SBAdminMenuItem(view_id="catalog_category", icon="List-checkbox", label="Tree View"),
SBAdminMenuItem(view_id="catalog_manufacturer", icon="Box"),
]
Step 2: Create Role-Based Configurations
sb_admin_configuration.py
class AdminConfiguration(SBAdminRoleConfiguration):
menu_items = admin_menu_items
default_view = SBAdminMenuItem(view_id="dashboard")
registered_views = [...]
class EditorConfiguration(SBAdminRoleConfiguration):
menu_items = editor_menu_items
default_view = SBAdminMenuItem(view_id="catalog_product")
registered_views = [...]
Step 3: Return the Configuration Based on User Role
sb_admin_configuration.py
EDITOR_ROLE = "Editors"
class SBAdminConfiguration(SBAdminConfigurationBase):
def get_configuration_for_roles(self, user_roles):
user_roles = list(user_roles)
if EDITOR_ROLE in user_roles:
return EditorConfiguration()
return AdminConfiguration()
With this setup, each user will see a customized menu based on their role. You can extend this further to support more roles or dynamic permissions.