Skip to main content

A collection of reusable, production-ready content blocks for Wagtail CMS, styled with Tailwind CSS and daisyUI.

Project description

wagtail-tw-blocks

CI CD Code Style: Black Code Linting: Ruff PyPI - Version PyPI - Python Version PyPI - Downloads PyPI - License

Overview

wagtail-tw-blocks is a collection of reusable, production-ready content blocks for Wagtail CMS, styled with Tailwind CSS and daisyUI. It provides a set of common UI components—ready to drop into your StreamField—so you can build rich, modern page layouts without reinventing the wheel.


Key features

  • Modern design: Tailwind CSS + daisyUI styling for clean, responsive layouts.
  • Multiple themes: All daisyUI themes included, with easy customization.
  • CI/CD: GitHub Actions pipelines for automated testing and deployment.

Demo

Demo


Available blocks

  • Accordion (Collapse): Expandable/collapsible sections for FAQs or structured content.
  • Alert: Highlight important messages or status updates.
  • Carousel: Image or content slider with responsive design.
  • Code: Syntax-highlighted code snippets for technical content (Requires highlight.js and clipboard.js to be included in your page).
  • Diff: Side-by-side or inline difference highlighting for image comparisons.
  • FAB: Floating Action Button with multiple action items.
  • Hover Gallery: Image gallery with hover effects.
  • List: Ordered lists with custom styling.
  • Steps: Step-by-step process indicators.
  • Tabs: Tabbed content sections.
  • Timeline: Chronological event listings.
  • Toast: Temporary notification messages.
  • Image: Responsive images with optional captions.
  • Browser Mockup: Browser window frame for screenshots or web content.
  • Phone Mockup: Mobile phone frame for app screenshots or mobile content.
  • Window Mockup: Desktop window frame for application screenshots or desktop content.

Installation

pip install wagtail-tw-blocks

Configuration

Add wagtail_blocks to your INSTALLED_APPS after configuring your Wagtail settings:

# project/settings.py

INSTALLED_APPS = [
    "wagtail_blocks",
    # ...
]

Available settings

You can customize the behavior of wagtail-tw-blocks by adding the following settings to your Django settings file:

# project/settings.py

# Extend or override the default programming languages for the CodeBlock
WB_CODE_BLOCK_PROGRAMMING_LANGUAGES = [
    ('python', 'Python'),
    ('javascript', 'JavaScript'),
    ('html', 'HTML'),
    ('css', 'CSS'),
    ('java', 'Java'),
    ('csharp', 'C#'),
    ('cpp', 'C++'),
    ('ruby', 'Ruby'),
    ('go', 'Go'),
    ('php', 'PHP'),
    # ...
]

# Show or hide the header the CodeBlock
WB_CODE_BLOCK_SHOW_HEADER = True  # Default is True

# Show or hide the programming language label in the CodeBlock
WB_CODE_BLOCK_SHOW_PROGRAMMING_LANGUAGE = True  # Default is True

# Show or hide the copy button in the CodeBlock
WB_CODE_BLOCK_SHOW_COPY_BUTTON = True  # Default is True

# Show or hide window control buttons in the CodeBlock
WB_CODE_BLOCK_SHOW_WINDOW_CONTROLS = True  # Default is True

Usage example

# blog/models.py

from wagtail_blocks import blocks
from wagtail.admin.panels import FieldPanel
from wagtail.fields import StreamField
from wagtail.models import Page
from django.utils.translation import gettext_lazy as _


class Article(Page):
    content = StreamField(
        [
            ("accordion", blocks.AccordionBlock()),
            ("alert", blocks.AlertBlock()),
            ("carousel", blocks.CarouselBlock()),
            ("code", blocks.CodeBlock()),
            ("diff", blocks.DiffBlock()),
            # ...
        ],
        help_text=_("Article content"),
    )

    content_panels = Page.content_panels + [
        FieldPanel("content"),
        # ...
    ]
<!-- blog/base.html -->
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Wagtail Blocks Usage Example</title>

    <!-- Code highlighting for CodeBlock -->
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css"
    />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
    <script>hljs.highlightAll();</script>

    <!-- Include stylesheet -->
    {% load static %}
    <link href="{% static 'wagtail_blocks/css/styles.css' %}" rel="stylesheet" type="text/css" />
  </head>

  <body>
    <main>
      <h1>{{ article.title }}</h1>
      
      <div>{{ article.content }}</div>
    </main>

    <!-- Lucide icons: https://lucide.dev/icons/ -->
    <script src="https://unpkg.com/lucide@latest"></script>
    <script>lucide.createIcons();</script>

    <!-- For copy buttons in CodeBlock -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.11/clipboard.min.js"></script>
    <script>const btns = new ClipboardJS(".btn-copy");</script>
  </body>
</html>

Extending

You can easily extend or customize the provided blocks by sub-classing them. For example, to create a custom alert block with additional styles:

from wagtail_blocks import blocks

class CustomAlertBlock(blocks.AlertBlock):

    class Meta:
        template = "path/to/your/custom_alert_template.html"
        icon = "warning"
        label = "Custom Alert"

Contributing

We welcome community contributions. See the CONTRIBUTING guide for setup instructions, coding standards, and workflow. Opening an issue before major changes helps align on scope and direction.


Support

For questions, bug reports, or feature requests, open an issue or join the conversation in GitHub Discussions.


License

Licensed under the MIT License. See the 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

wagtail_tw_blocks-0.3.0.tar.gz (50.5 kB view details)

Uploaded Source

Built Distribution

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

wagtail_tw_blocks-0.3.0-py3-none-any.whl (64.8 kB view details)

Uploaded Python 3

File details

Details for the file wagtail_tw_blocks-0.3.0.tar.gz.

File metadata

  • Download URL: wagtail_tw_blocks-0.3.0.tar.gz
  • Upload date:
  • Size: 50.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for wagtail_tw_blocks-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8628a652ad275f4c3d2322858ad9c7d972eeecafbde6f4f97fab055be8eca4ad
MD5 543370d49fbcf94245a6ce285dafee7c
BLAKE2b-256 27c9b098c58745538c8c933b99e023fdaa8876f61fdf3a4a46d5f3aaaaaf7d48

See more details on using hashes here.

File details

Details for the file wagtail_tw_blocks-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: wagtail_tw_blocks-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 64.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for wagtail_tw_blocks-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ac3dec66bddc82590b0e37fd4127b523a46674bb074cea55291f1fd5a9b96b9
MD5 a34d4c4a233400e47d313011506a8298
BLAKE2b-256 c34b43ed38a871da3af146b1aad8f1a3357c7a79d59bf48619122e1f76eecbb0

See more details on using hashes here.

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