Django Cotton BS5
Bootstrap 5 components for Django Cotton - A comprehensive library of reusable, modular components.
Note: This project is currently a work in progress. Users are encouraged to request new components or features via the issue tracker.
Installation
pip install django-cotton-bs5
Add cotton_bs5 to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
...
"django_cotton",
"cotton_bs5",
...
]
Available Components
The following Bootstrap 5 components are currently available as Django Cotton components:
- Alert (
<c-alert>) — Bootstrap alerts with variants, dismissible, slot/text support - Accordion (
<c-accordion>,<c-accordion.item>,<c-accordion.header>) — Collapsible accordion panels - Breadcrumbs (
<c-breadcrumbs>,<c-breadcrumbs.item>) — Navigation breadcrumbs - Button (
<c-button>) — Button/link with variants, outline, icon, slot/text - Button Group (
<c-button_group>) — Grouped buttons, vertical/size/label support - Card (
<c-card>,<c-card.body>,<c-card.title>) — Card container, body, and title - List Group (
<c-list_group>,<c-list_group.item>) — List group and items, horizontal/numbered/active/disabled - Modal (
<c-modal>,<c-modal.title>,<c-modal.body>) — Modal dialog, title, and body - Navbar (
<c-navbar>) — Responsive navigation bar with brand, expand, toggler - Progress (
<c-progress>) — Progress bar with value, min/max, variant, striped, animated, label - Spinner (
<c-spinner>) — Loading spinner, border/grow, size, variant, label - Table (
<c-table>) — Responsive table, striped, bordered, hover, small, variant, caption - Tabs (
<c-tabs>,<c-tabs.item>,<c-tabs.pane>) — Tab navigation and tab panes
More components are planned. Please request additional Bootstrap 5 components or features via the issue tracker.
Testing Components
This package provides four pytest fixtures for testing Django Cotton components:
cotton_render Fixture
Renders a component and returns the raw HTML as a string.
def test_alert_component(cotton_render):
html = cotton_render(
'cotton_bs5.alert',
message="Hello World",
variant="success"
)
assert 'alert-success' in html
assert 'Hello World' in html
cotton_render_soup Fixture
Renders a component and returns a BeautifulSoup parsed HTML object for easier DOM traversal and assertions.
def test_alert_component(cotton_render_soup):
soup = cotton_render_soup(
'cotton_bs5.alert',
message="Hello World",
variant="success"
)
alert_div = soup.find('div', class_='alert')
assert 'alert-success' in alert_div['class']
assert alert_div.get_text() == 'Hello World'
cotton_render_string Fixture
Compiles and renders template strings containing Cotton component syntax. Useful for testing multi-component markup and complex layouts inline without creating separate template files.
def test_button_inline(cotton_render_string):
html = cotton_render_string("<c-button variant='primary'>Click me</c-button>")
assert 'btn-primary' in html
def test_nested_components(cotton_render_string):
html = cotton_render_string(
"<c-ul><c-li text='first' /><c-li text='second' /></c-ul>"
)
assert 'first' in html
assert 'second' in html
cotton_render_string_soup Fixture
Combines cotton_render_string with BeautifulSoup parsing for easier DOM traversal and assertions on multi-component structures.
def test_nested_list(cotton_render_string_soup):
soup = cotton_render_string_soup(
"<c-ul><c-li text='first' /><c-li text='second' /></c-ul>"
)
items = soup.find_all('li')
assert len(items) == 2
assert items[0].get_text() == 'first'
def test_complex_layout(cotton_render_string_soup):
template = '''
<c-card>
<c-card.title>{{ title }}</c-card.title>
<c-card.body>
<c-button variant='primary'>{{ action }}</c-button>
</c-card.body>
</c-card>
'''
soup = cotton_render_string_soup(template, context={
'title': 'My Card',
'action': 'Click Here'
})
assert soup.find('h5').get_text() == 'My Card'
assert 'btn-primary' in soup.find('button')['class']
All fixtures automatically inject a request object, so you don't need to create one manually.
Contributing
This library follows django-cotton conventions and Bootstrap 5 standards. When adding new components:
- Use
<c-vars />for default values - Include proper accessibility attributes
- Support all relevant Bootstrap 5 options
- Maintain consistent naming conventions
- Test with various configurations
License
MIT License - see LICENSE file for details.
Metadata
Release files for django-cotton-bs5 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_cotton_bs5-0.10.0.tar.gz | 89.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_cotton_bs5-0.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 231.5 kB
Release files / django_cotton_bs5-0.10.0.tar.gz
| Download URL | django_cotton_bs5-0.10.0.tar.gz |
|---|---|
| Size | 89.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
649aaf3a38dbcedee6144bdc1661fc956729c5f7b76b07b746777df95220a368
|
|
BLAKE2b-256 checksum How to use checksums |
b550d4a4f8b4b7a2305cc2b4111c1c845ddb2e7b19fce2f279746a4bcb4f1a81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency logRelease files / django_cotton_bs5-0.10.0-py3-none-any.whl
| Download URL | django_cotton_bs5-0.10.0-py3-none-any.whl |
|---|---|
| Size | 142.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae70812afa64b8c9afee71e0d58ba5615e0495eec066ef372b39282eae49379e
|
|
BLAKE2b-256 checksum How to use checksums |
e5030fac71c9890b3f06f2ac2d4350ef3115fc74d70e24da4756adb5de1fe9c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency log