Troubleshooting
As larger projects get more complex, it can be hard to debug issues. Django Components provides a number of tools and approaches that can help you with that.
Component and slot highlighting¤
Django Components provides a visual debugging feature that helps you understand the structure and boundaries of your components and slots. When enabled, it adds a colored border and a label around each component and slot on your rendered page.
To enable component and slot highlighting, set debug_highlight_components
and/or debug_highlight_slots
to True
in your settings.py
file:
from django_components import ComponentsSettings
COMPONENTS = ComponentsSettings(
debug_highlight_components=True,
debug_highlight_slots=True,
)
Components will be highlighted with a blue border and label:
While the slots will be highlighted with a red border and label:
Warning
Use this feature ONLY in during development. Do NOT use it in production.
Component path in errors¤
When an error occurs, the error message will show the path to the component that caused the error. E.g.
KeyError: "An error occured while rendering components MyPage > MyLayout > MyComponent > Childomponent(slot:content)
The error message contains also the slot paths, so if you have a template like this:
{% component "my_page" %}
{% slot "content" %}
{% component "table" %}
{% slot "header" %}
{% component "table_header" %}
... {# ERROR HERE #}
{% endcomponent %}
{% endslot %}
{% endcomponent %}
{% endslot %}
{% endcomponent %}
Then the error message will show the path to the component that caused the error:
KeyError: "An error occured while rendering components my_page > layout > layout(slot:content) > my_page(slot:content) > table > table(slot:header) > table_header > table_header(slot:content)
Debug and trace logging¤
Django components supports logging with Django.
To configure logging for Django components, set the django_components
logger in LOGGING
in settings.py
(below).
Also see the settings.py
file in sampleproject for a real-life example.
import logging
import sys
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
"handlers": {
"console": {
'class': 'logging.StreamHandler',
'stream': sys.stdout,
},
},
"loggers": {
"django_components": {
"level": logging.DEBUG,
"handlers": ["console"],
},
},
}
Info
To set TRACE level, set "level"
to 5
:
Logger levels¤
As of v0.126, django-components primarily uses these logger levels:
DEBUG
: Report on loading associated HTML / JS / CSS files, autodiscovery, etc.TRACE
: Detailed interaction of components and slots. Logs when template tags, components, and slots are started / ended rendering, and when a slot is filled.
Slot origin¤
When you pass a slot fill to a Component, the component and slot names is remebered on the slot object.
Thus, you can check where a slot was filled from by printing it out:
might print: