Skip to main content

Bootstrap 5 components for use with Django Cotton.

Project description

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.

View demo

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:

  1. Use <c-vars /> for default values
  2. Include proper accessibility attributes
  3. Support all relevant Bootstrap 5 options
  4. Maintain consistent naming conventions
  5. Test with various configurations

License

MIT License - see LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_cotton_bs5-0.9.1.tar.gz (89.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_cotton_bs5-0.9.1-py3-none-any.whl (140.1 kB view details)

Uploaded Python 3

File details

Details for the file django_cotton_bs5-0.9.1.tar.gz.

File metadata

  • Download URL: django_cotton_bs5-0.9.1.tar.gz
  • Upload date:
  • Size: 89.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_cotton_bs5-0.9.1.tar.gz
Algorithm Hash digest
SHA256 945bdd2a92117c29b4ddff74a65176de89d966a62708f9dabc7fa9429f80fd8b
MD5 7494a68bf492613f5d417eb7f5979e3a
BLAKE2b-256 ee225a895f0004b830602ef8d861209410a19d4c7eaa8980dea9b29e53d601cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_cotton_bs5-0.9.1.tar.gz:

Publisher: on-release-main.yml on SamuelJennings/django-cotton-bs5

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_cotton_bs5-0.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_cotton_bs5-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b39b918e4c1143f28c4f1ccca1cfcb1c7f4fd2dd062751db39d70e2ba0927655
MD5 a839c372d2cd6e7d62b280c288d89223
BLAKE2b-256 aed30d140d8149762b2f7de26fc8b5e7ecec62fce3ffb9ae348df79d692b515c

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_cotton_bs5-0.9.1-py3-none-any.whl:

Publisher: on-release-main.yml on SamuelJennings/django-cotton-bs5

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page