部件
部件系统的完整属性与方法参考,内容由 docstring 生成。如需面向任务式讲解,请参阅自定义视图与部件和表单布局。
部件是可组合、可渲染的构建块,用于动态构建 UI 元素。下列每个部件类都可以直接从 starlette_admin 导入。
根据上下文不同,部件系统主要承担两种角色:
- 仪表盘与自定义页面:用作
CustomView的widget属性,构建独立界面和指标看板。 - 表单布局:用作
BaseModelView的form_layout属性,在创建/编辑表单上排列和分组输入项。
基类
所有部件均继承自一个公共基类,该基类定义了标准的渲染与资源收集接口。
starlette_admin.widgets.BaseWidget
dataclass
Bases: ABC
Base class for all dashboard widgets.
Subclasses set template to a path under the theme's widgets/ directory
and override get_context to supply template variables. Layout widgets
should also override render to recursively render their children before
rendering their own template.
Source code in starlette_admin/widgets.py
additional_css_links(request)
additional_js_links(request)
render(request, env)
async
Render the widget to HTML using env.
Source code in starlette_admin/widgets.py
内容部件
内容部件充当 UI 树的叶节点。它们不包含其他部件,而是展示实时数据。每个内容部件都接受一个异步回调,该回调在每个请求中调用一次,确保渲染出的值始终是最新的。
starlette_admin.widgets.StatWidget
dataclass
Bases: BaseWidget
Renders a KPI stat card.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Label shown as the card subheader. |
required |
value_callback
|
Callable[[Request], Awaitable[int | float | str]]
|
Async callable returning the primary metric value. |
required |
link
|
str | None
|
Optional URL; makes the entire card a clickable anchor. |
None
|
description
|
str
|
Secondary text shown below the value. |
''
|
description_icon
|
str
|
Icon class for the description badge
(e.g. |
''
|
color
|
str
|
Tabler color token applied to the description area
(e.g. |
''
|
description_icon_position
|
Literal['before', 'after']
|
|
'after'
|
chart_callback
|
Callable[[Request], Awaitable[dict[str, Any]]] | None
|
Optional async callable returning an ApexCharts |
None
|
chart_type
|
str
|
ApexCharts chart type for the sparkline (default |
'line'
|
chart_height
|
str
|
Height passed to ApexCharts (default |
'40px'
|
chart_options
|
dict[str, Any]
|
Extra ApexCharts options merged over the sparkline defaults. |
dict()
|
countup
|
bool
|
When |
False
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.ChartWidget
dataclass
Bases: BaseWidget
Renders an ApexCharts chart inside a Tabler card.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Card heading. |
required |
chart_type
|
str
|
ApexCharts chart type, e.g. |
required |
series_callback
|
Callable[[Request], Awaitable[Any]]
|
Async callable returning the ApexCharts |
required |
height
|
int
|
Chart height in pixels (default |
300
|
options
|
dict[str, Any]
|
Extra ApexCharts config merged over the |
dict()
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.TableWidget
dataclass
Bases: BaseWidget
Renders a compact summary table from a data callback.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Card heading displayed above the table. |
required |
columns
|
list[str]
|
List of column header labels. |
required |
rows_callback
|
Callable[[Request], Awaitable[list[list[Any]]]]
|
Async callable returning rows as a list of lists. |
required |
Source code in starlette_admin/widgets.py
starlette_admin.widgets.TextWidget
dataclass
Bases: BaseWidget
Renders a block of text, optionally as Markdown.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
content
|
str
|
Static markdown or plain text. |
required |
markdown
|
bool
|
Whether to render |
False
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.HtmlWidget
dataclass
Bases: BaseWidget
Renders an arbitrary block of pre-rendered HTML.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
html
|
str
|
Raw HTML string. It is marked safe and rendered without escaping. |
required |
Source code in starlette_admin/widgets.py
starlette_admin.widgets.DividerWidget
dataclass
Bases: BaseWidget
A horizontal rule / visual separator between other widgets.
Source code in starlette_admin/widgets.py
布局部件
布局部件是容器,用于排列其 children(可以是内容部件、表单字段或其他布局部件)。
自动资源管理:布局部件会递归遍历自身的树结构,从子节点收集 additional_css_links 和 additional_js_links。这确保深层嵌套的组件无需任何手动接线即可自动加载所需的 CSS/JS 资源。
starlette_admin.widgets.RowWidget
dataclass
Bases: BaseWidget
Arranges child widgets horizontally in a plain Bootstrap grid row.
Use CardRowWidget instead when every child is itself a card (KPI
stats, charts, tables) and should get Tabler's row-deck row-cards
equal-height-card treatment.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
children
|
list[BaseWidget | Col]
|
Widgets (or |
list()
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.CardRowWidget
dataclass
Bases: RowWidget
A RowWidget for rows of cards: same layout mechanics, plus
Tabler's row-deck row-cards classes so the cards in the row share a
consistent, equal height. Used for dashboard rows of StatWidget,
ChartWidget, TableWidget, etc.
Source code in starlette_admin/widgets.py
starlette_admin.widgets.ColumnWidget
dataclass
Bases: BaseWidget
Stacks child widgets vertically.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
children
|
list[BaseWidget]
|
Widgets to stack. Also accepts |
list()
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.GridWidget
dataclass
Bases: BaseWidget
Arranges child widgets in a responsive Bootstrap grid.
Uses Bootstrap's row-cols-* system: Tabler/Bootstrap handles all
responsive behavior; no custom <style> or media queries are emitted.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
children
|
list[BaseWidget]
|
Widgets to render in the grid. Also accepts
|
list()
|
breakpoints
|
Breakpoints
|
Items-per-row at each viewport size. |
(lambda: Breakpoints(default=1))()
|
gutter
|
int
|
Bootstrap gutter scale applied as |
3
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.PanelWidget
dataclass
Bases: BaseWidget
Wraps child widgets inside a titled card/panel.
When used in a form_layout and resolved down to exactly one visible
field, that field's label is hidden: the panel title already names it,
so the label would be redundant. See
BaseModelView.resolve_form_layout.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Panel heading. |
required |
children
|
list[BaseWidget]
|
Widgets rendered inside the panel body. Also accepts
|
list()
|
collapsible
|
bool
|
Whether the panel can be collapsed. |
False
|
collapsed
|
bool
|
Initial collapsed state (only meaningful when collapsible). |
False
|
icon
|
str
|
Optional icon class for the panel header. |
''
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.FieldsetWidget
dataclass
Bases: BaseWidget
Wraps child widgets inside a native HTML <fieldset>/<legend>.
Use this instead of PanelWidget when you want the semantics and
plain styling of a form fieldset rather than a card: no shadow, no
header bar, just a bordered group with its legend as the caption.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
legend
|
str
|
Text rendered in the |
required |
children
|
list[BaseWidget]
|
Widgets rendered inside the fieldset. Also accepts
|
list()
|
disabled
|
bool
|
Sets the HTML |
False
|
Source code in starlette_admin/widgets.py
starlette_admin.widgets.TabsWidget
dataclass
Bases: BaseWidget
Renders child widgets as Bootstrap tabs.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tabs
|
list[tuple[str, BaseWidget]]
|
List of (tab_label, widget) tuples. A tab's |
list()
|
save_state
|
bool
|
Remember the last active tab in the browser's
|
True
|
Source code in starlette_admin/widgets.py
响应式尺寸
专用于管理不同屏幕尺寸下的响应式网格行为、列宽和断点的工具类。
starlette_admin.widgets.Breakpoints
dataclass
Bootstrap breakpoint column sizes for Col and GridWidget.
Each field maps to a Bootstrap responsive infix. None (the default)
means the breakpoint is omitted from the generated class string.
For Col, the values are Bootstrap column spans (1-12), or the literal
"auto" for an equal-width flexible column ("col-md" rather than
"col-md-6"):
Breakpoints(default=12, md=6) -> "col-12 col-md-6"
Breakpoints(default=12, md="auto") -> "col-12 col-md"
For GridWidget, the values are items-per-row counts ("auto" does
not apply there):
Breakpoints(default=1, md=2, lg=3) -> "row-cols-1 row-cols-md-2 row-cols-lg-3"
Source code in starlette_admin/widgets.py
starlette_admin.widgets.Col
dataclass
Responsive column wrapper for children of RowWidget.
Wrap a child widget with Col to control its Bootstrap column span at
each viewport size. Omitting breakpoints (or leaving all fields
None) yields an auto col class.
widget accepts the same shorthand as any other widget slot (see
normalize_widget), so Col("email", Breakpoints(md=6)) is
equivalent to Col(FieldRef("email"), Breakpoints(md=6)).
Example::
Col(my_widget, breakpoints=Breakpoints(default=12, md=6))
# -> class="col-12 col-md-6"
Source code in starlette_admin/widgets.py
表单布局引用
专用于模型表单场景的特殊部件,用于引用特定的数据库字段。
starlette_admin.widgets.FieldRef
dataclass
Bases: BaseWidget
Leaf widget referencing a declared field by name, for use inside
BaseModelView.form_layout.
FieldRef("email") placed anywhere in a form_layout tree — bare,
or nested inside RowWidget, PanelWidget, TabsWidget, etc. —
means "render the declared email field here". It is not
self-sufficient: the _field/_value/_error attributes are
filled in by BaseModelView.resolve_form_layout from the current
request's obj/errors/field permissions before rendering, so a bare
FieldRef constructed and rendered outside that pipeline has nothing
to show.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name of the declared field to render. |
required |
show_label
|
bool
|
Whether to render the field's |
True
|
prepend
|
str | None
|
Bootstrap/Tabler input-group addon rendered before the
input, e.g. |
None
|
append
|
str | None
|
Same as |
None
|
flat
|
bool
|
Render the input-group with Tabler's |
False
|
Source code in starlette_admin/widgets.py
简写与规范化
为了让布局代码整洁且易于阅读,容器部件接受普通 Python 类型来代替显式的部件类实例化。在初始化期间(__post_init__),容器会自动将这些简写值解析为对应的部件对象。
支持的简写形式:
str:解析为字段引用(FieldRef)。tuple:解析为并排行(RowWidget)。list:解析为垂直堆叠(ColumnWidget)。
starlette_admin.widgets.WidgetShorthand = 'BaseWidget | str | tuple[Any, ...] | list[Any]'
module-attribute
Anything a container widget's children (or Col.widget, or a
TabsWidget tab's widget) will accept in place of an already-built
BaseWidget. See normalize_widget for what each shorthand expands to.
starlette_admin.widgets.normalize_widget(node)
Expand a shorthand WidgetShorthand into a real widget.
A bare str becomes a FieldRef referencing the declared field of
that name. A tuple becomes a RowWidget with each item in its own
Col, full width below the md breakpoint and equal width at md and
above (matching how a single item renders full width on its own); if
every item resolves to a StatWidget, a CardRowWidget is used instead
so the cards get the row-deck equal-height treatment. A list becomes a
ColumnWidget stacking each item vertically. Anything else is assumed
to already be a BaseWidget and is returned unchanged.
Each item handed to the resulting RowWidget/ColumnWidget is itself
shorthand-typed, so nesting (a tuple inside a list, a list inside a
tuple, and so on) is expanded in turn by that container's own
__post_init__ when it is constructed below: no explicit recursion is
needed here.
Source code in starlette_admin/widgets.py
辅助函数
用于在 Jinja2 模板或自定义上下文中渲染部件的工具函数。
starlette_admin.widgets.render_widget(widget, request, env)
async
Render widget to HTML using env.
This is a convenience helper for custom views that want to render widgets
outside of the default CustomView.widget flow.