BulletedList
Group: Lists
Description
A BulletedList turns a Python list into a bulleted list on the page,
one bullet per item. It is the usual way to show a collection from
your state when order does not matter.
Syntax
BulletedList(items)
Parameters
| Parameter | Type | Default | Meaning |
|---|---|---|---|
items |
list |
required | One entry per bullet. Items can be strings or components; each gets its own line automatically. |
Like every component, BulletedList also accepts
styling and attribute keywords.
Examples
A list straight from state, growing as the visitor adds to it:
from drafter import *
from dataclasses import dataclass
@dataclass
class State:
supplies: list[str]
@route
def index(state: State) -> Page:
return Page(state, [
Header("Expedition Supplies"),
BulletedList(state.supplies),
"Add an item:",
TextBox("item"),
"\n",
Button("Pack it", "pack")
])
@route
def pack(state: State, item: str) -> Page:
state.supplies.append(item)
return index(state)
start_server(State(["rope", "lantern"]))
Notes
- Items that are not strings need to be converted first: build a
list of strings with a loop (
for pet in state.pets:...names.append(pet.name)) and pass that list instead. For rows of structured data, a Table is usually clearer. - An empty list renders as nothing at all. If an empty list deserves
an explanation, use an
ifin your route to show a message like"Nothing packed yet.\n"instead of the empty list. - In tests, compare structurally:
assert_has(index(State(["rope"])), BulletedList(["rope"])).
Related components
- NumberedList: numbers the items, for when order matters.
- Table: displays rows with multiple columns.
- DefinitionList: displays term and definition pairs.