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.7.0.tar.gz (93.3 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.7.0-py3-none-any.whl (139.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_cotton_bs5-0.7.0.tar.gz
  • Upload date:
  • Size: 93.3 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.7.0.tar.gz
Algorithm Hash digest
SHA256 4849ec2e0fdbe3d27e9d602a066f187d415b1809e9d12f2596209caf3f394f80
MD5 46ebc3e53da48a21ed8bb3689d462bc9
BLAKE2b-256 e9f2462163f5696df8b1fc7ca64e626aa977dd507c405a378b748601bbe6e4c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for django_cotton_bs5-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81e1e0cd3ba17e0099022d48f973208cbf179d4e97fd96441cee96d86cb85063
MD5 68883e9271e32d2c80dbbe15d05a3231
BLAKE2b-256 58e8d948bf598c425e901e002ca08c9273f17063634bcda35d1ae689ac41113c

See more details on using hashes here.

Provenance

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