8000 Traceback/exception stack doesn't always include component name or filename · Issue #1447 · django-components/django-components · GitHub
[go: up one dir, main page]

Skip to content

Traceback/exception stack doesn't always include component name or filename #1447

@mscheper

Description

@mscheper

I often have a hard time finding the source of problems in my Django Components templates. I can work around it by deleting parts of the templates until the exception goes away, but this can be time-consuming.

I would expect the filename, or component name, to be included in the exception message, and a line number as well. But in many cases, the component name doesn't appear in the message, and just as often, none of my project's code is in the stack at all.

I'm including a couple of examples here.

This first exception, which was actually pretty quick to find the cause of, appeared in the console as soon as I started the server (python manage.py runserver). It contains what looks like a valid line number, but not the name of the component or the template file.

Watching for file changes with StatReloader
[2025-10-07 21:48:04 UTC] [django.utils.autoreload:667] [INFO] Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/usr/lib/python3.13/threading.py", line 1043, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "/usr/lib/python3.13/threading.py", line 994, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
    ~~^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/management/commands/runserver.py", line 124, in inner_run
    autoreload.raise_last_exception()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/utils/autoreload.py", line 86, in raise_last_exception
    raise _exception[1]
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/management/__init__.py", line 394, in execute
    autoreload.check_errors(django.setup)()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
    ~~^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/apps/registry.py", line 124, in populate
    app_config.ready()
    ~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/apps.py", line 70, in ready
    extensions._init_app()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/extension.py", line 1177, in _init_app
    getattr(self, hook)(data)
    ~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/extension.py", line 960, in wrapper
    return func(self, ctx)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/extension.py", line 1250, in on_component_class_created
    extension.on_component_class_created(ctx)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/extensions/dependencies.py", line 20, in on_component_class_created
    cache_component_js(ctx.component_cls, force=True)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/dependencies.py", line 116, in cache_component_js
    if not comp_cls.js or not is_nonempty_str(comp_cls.js):
           ^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_media.py", line 410, in __get__
    return get_comp_media_attr(self._attr_name)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_media.py", line 397, in get_comp_media_attr
    return _get_comp_cls_attr(comp_cls, attr)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_media.py", line 426, in _get_comp_cls_attr
    _resolve_media(base, comp_media)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_media.py", line 623, in _resolve_media
    template_str, template_obj = _get_asset(
                                 ~~~~~~~~~~^
        comp_cls,
        ^^^^^^^^^
    ...<3 lines>...
        comp_dirs=comp_dirs,
        ^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_media.py", line 1115, in _get_asset
    template = load_component_template(comp_cls, filepath=asset_file, content=None)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/template.py", line 185, in load_component_template
    template = _load_django_template(filepath)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/template.py", line 352, in _load_django_template
    return django_get_template(template_name).template
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loader.py", line 15, in get_template
    return engine.get_template(template_name)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/backends/django.py", line 79, in get_template
    return Template(self.engine.get_template(template_name), self)
                    ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/engine.py", line 177, in get_template
    template, origin = self.find_template(template_name)
                       ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/engine.py", line 159, in find_template
    template = loader.get_template(name, skip=skip)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loaders/cached.py", line 57, in get_template
    template = super().get_template(template_name, skip)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loaders/base.py", line 28, in get_template
    return Template(
        contents,
    ...<2 lines>...
        self.engine,
    )
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/django_monkeypatch.py", line 78, in __init__
    original_init(self, template_string, origin, name, *args, **kwargs)  # type: ignore[misc]
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 154, in __init__
    self.nodelist = self.compile_nodelist()
                    ~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/django_monkeypatch.py", line 121, in _compile_nodelist
    nodelist = parser.parse()
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_registry.py", line 566, in tag_fn
    return ComponentNode.parse(
           ~~~~~~~~~~~~~~~~~~~^
        parser,
        ^^^^^^^
    ...<4 lines>...
        end_tag=end_tag,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component.py", line 3963, in parse
    node: ComponentNode = super(cls, cached_subcls).parse(  # type: ignore[attr-defined]
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        parser,
        ^^^^^^^
    ...<2 lines>...
        name=name,
        ^^^^^^^^^^
    )
    ^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/node.py", line 551, in parse
    body, contents = tag.parse_body()
                     ~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 160, in <lambda>
    parse_body=lambda: _parse_tag_body(parser, end_tag, is_inline) if end_tag else (NodeList(), None),
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 149, in _parse_tag_body
    body = parser.parse(parse_until=[end_tag])
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_registry.py", line 566, in tag_fn
    return ComponentNode.parse(
           ~~~~~~~~~~~~~~~~~~~^
        parser,
        ^^^^^^^
    ...<4 lines>...
        end_tag=end_tag,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component.py", line 3963, in parse
    node: ComponentNode = super(cls, cached_subcls).parse(  # type: ignore[attr-defined]
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        parser,
        ^^^^^^^
    ...<2 lines>...
        name=name,
        ^^^^^^^^^^
    )
    ^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/node.py", line 551, in parse
    body, contents = tag.parse_body()
                     ~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 160, in <lambda>
    parse_body=lambda: _parse_tag_body(parser, end_tag, is_inline) if end_tag else (NodeList(), None),
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 149, in _parse_tag_body
    body = parser.parse(parse_until=[end_tag])
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 523, in parse
    self.unclosed_block_tag(parse_until)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 590, in unclosed_block_tag
    raise self.error(token, msg)
django.template.exceptions.TemplateSyntaxError: Unclosed tag on line 7: 'component'. Looking for one of: endcomponent.

The following exception didn't appear until I tried to load the page I'm working on. It says the error is on line 173, but none of my component templates have that many lines, so I presume this refers to a line in a combined template that ultimately gets fed to Django. Is there a way to see what that template looks like, to help find the problem?

For other exceptions, line numbers aren't shown at all, or they're ridiculously large.

Traceback (most recent call last):
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 510, in parse
    compile_func = self.tags[command]
                   ~~~~~~~~~^^^^^^^^^
KeyError: 'endif'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/wsgi.py", line 124, in __call__
    response = self.get_response(request)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 140, in get_response
    response = self._middleware_chain(request)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 57, in inner
    response = response_for_exception(request, exc)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 141, in response_for_exception
    response = handle_uncaught_exception(
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 182, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_extensions/management/technical_response.py", line 41, in null_technical_500_response
    raise exc_value.with_traceback(tb)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 220, in _get_response
    response = response.render()
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/response.py", line 114, in render
    self.content = self.rendered_content
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/response.py", line 90, in rendered_content
    template = self.resolve_template(self.template_name)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/response.py", line 74, in resolve_template
    return get_template(template, using=self.using)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loader.py", line 15, in get_template
    return engine.get_template(template_name)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/backends/django.py", line 79, in get_template
    return Template(self.engine.get_template(template_name), self)
                    ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/engine.py", line 177, in get_template
    template, origin = self.find_template(template_name)
                       ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/engine.py", line 159, in find_template
    template = loader.get_template(name, skip=skip)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loaders/cached.py", line 57, in get_template
    template = super().get_template(template_name, skip)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loaders/base.py", line 28, in get_template
    return Template(
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/django_monkeypatch.py", line 78, in __init__
    original_init(self, template_string, origin, name, *args, **kwargs)  # type: ignore[misc]
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 154, in __init__
    self.nodelist = self.compile_nodelist()
                    ~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/django_monkeypatch.py", line 121, in _compile_nodelist
    nodelist = parser.parse()
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loader_tags.py", line 299, in do_extends
    nodelist = parser.parse()
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/loader_tags.py", line 234, in do_block
    nodelist = parser.parse(("endblock",))
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_registry.py", line 566, in tag_fn
    return ComponentNode.parse(
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component.py", line 3963, in parse
    node: ComponentNode = super(cls, cached_subcls).parse(  # type: ignore[attr-defined]
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/node.py", line 551, in parse
    body, contents = tag.parse_body()
                     ~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 160, in <lambda>
    parse_body=lambda: _parse_tag_body(parser, end_tag, is_inline) if end_tag else (NodeList(), None),
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 149, in _parse_tag_body
    body = parser.parse(parse_until=[end_tag])
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/defaulttags.py", line 862, in do_for
    nodelist_loop = parser.parse(
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/defaulttags.py", line 962, in do_if
    nodelist = parser.parse(("elif", "else", "endif"))
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 518, in parse
    raise self.error(token, e)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 516, in parse
    compiled_result = compile_func(self, token)
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component_registry.py", line 566, in tag_fn
    return ComponentNode.parse(
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/component.py", line 3963, in parse
    node: ComponentNode = super(cls, cached_subcls).parse(  # type: ignore[attr-defined]
    
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/node.py", line 551, in parse
    body, contents = tag.parse_body()
                     ~~~~~~~~~~~~~~^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 160, in <lambda>
    parse_body=lambda: _parse_tag_body(parser, end_tag, is_inline) if end_tag else (NodeList(), None),
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django_components/util/template_tag.py", line 149, in _parse_tag_body
    body = parser.parse(parse_until=[end_tag])
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 512, in parse
    self.invalid_block_tag(token, command, parse_until)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mscheper/git/myproject/venv/lib/python3.13/site-packages/django/template/base.py", line 567, in invalid_block_tag
    raise self.error(
    ^
django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 173: 'endif', expected 'endcomponent'. Did you forget to register or load this tag?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Ready for release

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0