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.6.2.tar.gz (92.8 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.6.2-py3-none-any.whl (138.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for django_cotton_bs5-0.6.2.tar.gz
Algorithm Hash digest
SHA256 361637e6f75140a34396491fe861bbd72345abcfe7aea52202eac2a3dccb4689
MD5 43b39d2b7b804fef810be0edd9eb238e
BLAKE2b-256 852b065287341bf482d211a5859338b4e393c0056a7fe378af1ff89bd5b8c882

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_cotton_bs5-0.6.2.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.6.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_cotton_bs5-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5abeb152c1e594ec6a78d0bd3481e2fe8a027cf377e0984cf121c27ca74e5ce6
MD5 198f5d5997b5c31d58a59a4c6530b126
BLAKE2b-256 78d9130b7c6054219d07b2a2b58fc853dc03a2f8246b2ae817bb7b210ff2105d

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_cotton_bs5-0.6.2-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