Module
rendering.errors
Rich template error handling with contextual debugging information.
This module provides structured error objects for template rendering failures, enabling clear error messages with source context, suggestions, and IDE-friendly formatting.
Key Classes:
TemplateRenderError:
Rich exception with template context, line numbers, source snippets,
and actionable suggestions. Extends BengalRenderingError for
consistent error handling across the codebase.
TemplateErrorContext:
Captures error location (file, line, column) and surrounding source
code for display.
InclusionChain:
Tracks template include/extend hierarchy to show how the error
location was reached.
ErrorDeduplicator:
Tracks and deduplicates similar errors across multiple pages to
reduce noise in build output. Attached to BuildStats (not global).
Error Types:
- syntax: Invalid Jinja2 syntax (missing tags, brackets, etc.)
- filter: Unknown filter name (e.g.,
| nonexistent) - undefined: Undefined variable access (e.g.,
{{ missing_var }}) - callable: NoneType is not callable (e.g., missing filter/function registration)
- none_access: NoneType is not iterable (e.g., using 'in' on None)
- runtime: Runtime errors during template execution
- other: Unclassified template errors
Display Functions:
display_template_error():
Renders error to terminal with syntax highlighting (via Rich if
available) or plain text fallback. Shows source context, suggestions,
and documentation links.
Usage:
Typically created automatically by the rendering pipeline:
>>> try:
... template.render(context)
... except Exception as e:
... error = TemplateRenderError.from_jinja2_error(
... e, template_name, page_source, template_engine
... )
... display_template_error(error)
Error deduplication for batch rendering (via BuildStats):
>>> dedup = build_stats.get_error_deduplicator()
>>> for page in pages:
... try:
... render(page)
... except Exception as e:
... error = TemplateRenderError.from_jinja2_error(...)
... if dedup.should_display(error):
... display_template_error(error)
>>> dedup.display_summary() # Show counts of suppressed errors
Error Message Enhancement:
The module includes smart suggestion generation:
- Typo detection for variable/filter names
- Safe access patterns for undefined errors
- Callable identification from template source
- Documentation links for common issues
Related Modules:
- bengal.rendering.engines.errors: Low-level engine exceptions
- bengal.errors: Base error classes (BengalRenderingError)
- bengal.orchestration.stats: BuildStats with error deduplicator
- bengal.utils.rich_console: Rich terminal output utilities