from django.http import HttpRequest from django.utils.safestring import mark_safe from django_components import Component, types from .utils import discover_example_modules class ExamplesIndexPage(Component): """Index page that lists all available examples""" class Media: js = ( mark_safe( '' ), ) def get_template_data(self, args, kwargs, slots, context): # Get the list of discovered examples example_names = discover_example_modules() # Convert example names to display format examples = [] for name in sorted(example_names): # Convert snake_case to PascalCase (e.g. error_fallback -> ErrorFallback) display_name = "".join(word.capitalize() for word in name.split("_")) examples.append( { "name": name, # Original name for URLs "display_name": display_name, # PascalCase for display } ) return { "examples": examples, } class View: def get(self, request: HttpRequest): return ExamplesIndexPage.render_to_response(request=request) template: types.django_html = """ Django Components Examples

Django Components Examples

Interactive examples showcasing django-components features

{% if examples %}
{% for example in examples %}

{{ example.display_name }}

{{ example.display_name }} component example

View Example
{% endfor %}
{% else %}

No examples found

No example components were discovered in the docs/examples/ directory.

{% endif %}

About these examples

These examples are dynamically discovered from the docs/examples/ directory. Each example includes a component definition, live demo page, and tests.

View on GitHub
""" # noqa: E501