TemplateSyntaxError at /django_admin_tests/latest/english/defaults/500-template-broken/

Invalid block tag on line 7: 'unknown_tag_name_foo', expected 'endblock'. Did you forget to register or load this tag?
Request Method:
Request URL: http://Hello:1337/django_admin_tests/latest/english/defaults/500-template-broken/
Django Version: 6.1.dev20251204163722
Exception Type: TemplateSyntaxError
Exception Value:
Invalid block tag on line 7: 'unknown_tag_name_foo', expected 'endblock'. Did you forget to register or load this tag?
Exception Location: /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 634, in invalid_block_tag
Raised during: demo.demo_urls.server_error_template_broken
Python Executable: /home/runner/work/django_admin_tests/django_admin_tests/.venv/bin/python
Python Version: 3.14.0
Python Path:
['/home/runner/work/django_admin_tests/django_admin_tests',
 '/opt/hostedtoolcache/Python/3.14.0/x64/lib/python314.zip',
 '/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14',
 '/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/lib-dynload',
 '/home/runner/work/django_admin_tests/django_admin_tests/.venv/lib/python3.14/site-packages',
 '__editable__.django-6.1.dev20251204163722.finder.__path_hook__']
Server time: Fri, 05 Dec 2025 03:42:52 +0000

Error during template rendering

In template /home/runner/work/django_admin_tests/django_admin_tests/demo/templates/demo/broken_template.html, error at line 7

Invalid block tag on line 7: 'unknown_tag_name_foo', expected 'endblock'. Did you forget to register or load this tag?

1 {% extends "demo/base.html" %}
2 {% block title %}Broken template{% endblock %}
3 {% block h1 %}Broken template{% endblock %}
4
5 {% block content %}
6 <p>This is a test.</p>
7 <p>{% unknown_tag_name_foo %}</p>
8 {% endblock %}
9

Traceback Switch to copy-and-paste view

  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 577, in parse
    1.                 # Add the token to the command stack. This is used for error
    2.                 # messages if further parsing fails due to an unclosed block
    3.                 # tag.
    4.                 self.command_stack.append((command, token))
    5.                 # Get the tag callback function from the ones registered with
    6.                 # the parser.
    7.                 try:
    1.                     compile_func = self.tags[command]
                                              ^^^^^^^^^^^^^^^^^^
    1.                 except KeyError:
    2.                     self.invalid_block_tag(token, command, parse_until)
    3.                 # Compile the callback into a node object and add it to
    4.                 # the node list.
    5.                 try:
    6.                     compiled_result = compile_func(self, token)
    Local vars
    Variable Value
    command
    'unknown_tag_name_foo'
    nodelist
    [<TextNode: '\n  <p>This is a test.</p>'>]
    parse_until
    ('endblock',)
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "unknown_tag_name_foo...">
    token_type
    2
  • During handling of the above exception ('unknown_tag_name_foo'), another exception occurred:

  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/core/handlers/exception.py, line 55, in inner
    1.         return inner
    2.     else:
    3.         @wraps(get_response)
    4.         def inner(request):
    5.             try:
    1.                 response = get_response(request)
                                     ^^^^^^^^^^^^^^^^^^^^^
    1.             except Exception as exc:
    2.                 response = response_for_exception(request, exc)
    3.             return response
    4.         return inner
    Local vars
    Variable Value
    exc
    TemplateSyntaxError("Template: /home/runner/work/django_admin_tests/django_admin_tests/demo/templates/demo/broken_template.html, Invalid block tag on line 7: 'unknown_tag_name_foo', expected 'endblock'. Did you forget to register or load this tag?")
    get_response
    <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7fe9134874d0>>
    request
    <WSGIRequest: GET '/django_admin_tests/latest/english/defaults/500-template-broken/'>
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/core/handlers/base.py, line 198, in _get_response
    1.         if response is None:
    2.             wrapped_callback = self.make_view_atomic(callback)
    3.             # If it is an asynchronous view, run it in a subthread.
    4.             if iscoroutinefunction(wrapped_callback):
    5.                 wrapped_callback = async_to_sync(wrapped_callback)
    6.             try:
    1.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.             except Exception as e:
    2.                 response = self.process_exception_by_middleware(e, request)
    3.                 if response is None:
    4.                     raise
    5.         # Complain if the view returned None (a common error).
    Local vars
    Variable Value
    callback
    <function server_error_template_broken at 0x7fe91485af00>
    callback_args
    ()
    callback_kwargs
    {}
    middleware_method
    <bound method CsrfViewMiddleware.process_view of <CsrfViewMiddleware get_response=convert_exception_to_response.<locals>.inner>>
    request
    <WSGIRequest: GET '/django_admin_tests/latest/english/defaults/500-template-broken/'>
    response
    None
    self
    <django.core.handlers.wsgi.WSGIHandler object at 0x7fe9134874d0>
    wrapped_callback
    <function server_error_template_broken at 0x7fe91485af00>
  • /home/runner/work/django_admin_tests/django_admin_tests/demo/demo_urls.py, line 45, in server_error_template_broken
    1. def server_error_template_broken(request):
    2.     request.META = {
    3.         "SERVER_NAME": "Hello",
    4.         "SERVER_PORT": 1337,
    5.     }
    1.     return render(request, "demo/broken_template.html")
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1. def server_error_unicode(request):
    2.     request.META = {
    3.         "SERVER_NAME": "Hello",
    4.         "SERVER_PORT": 1337,
    Local vars
    Variable Value
    request
    <WSGIRequest: GET '/django_admin_tests/latest/english/defaults/500-template-broken/'>
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/shortcuts.py, line 26, in render
    1. def render(
    2.     request, template_name, context=None, content_type=None, status=None, using=None
    3. ):
    4.     """
    5.     Return an HttpResponse whose content is filled with the result of calling
    6.     django.template.loader.render_to_string() with the passed arguments.
    7.     """
    1.     content = loader.render_to_string(template_name, context, request, using=using)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.     return HttpResponse(content, content_type, status)
    2. def redirect(to, *args, permanent=False, preserve_request=False, **kwargs):
    3.     """
    4.     Return an HttpResponseRedirect to the appropriate URL for the arguments
    Local vars
    Variable Value
    content_type
    None
    context
    None
    request
    <WSGIRequest: GET '/django_admin_tests/latest/english/defaults/500-template-broken/'>
    status
    None
    template_name
    'demo/broken_template.html'
    using
    None
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loader.py, line 61, in render_to_string
    1.     Load a template and render it with a context. Return a string.
    2.     template_name may be a string or a list of strings.
    3.     """
    4.     if isinstance(template_name, (list, tuple)):
    5.         template = select_template(template_name, using=using)
    6.     else:
    1.         template = get_template(template_name, using=using)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.     return template.render(context, request)
    2. def _engine_list(using=None):
    3.     return engines.all() if using is None else [engines[using]]
    Local vars
    Variable Value
    context
    None
    request
    <WSGIRequest: GET '/django_admin_tests/latest/english/defaults/500-template-broken/'>
    template_name
    'demo/broken_template.html'
    using
    None
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loader.py, line 15, in get_template
    1.     Raise TemplateDoesNotExist if no such template exists.
    2.     """
    3.     chain = []
    4.     engines = _engine_list(using)
    5.     for engine in engines:
    6.         try:
    1.             return engine.get_template(template_name)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.         except TemplateDoesNotExist as e:
    2.             chain.append(e)
    3.     raise TemplateDoesNotExist(template_name, chain=chain)
    Local vars
    Variable Value
    chain
    []
    engine
    <django.template.backends.django.DjangoTemplates object at 0x7fe914869400>
    engines
    [<django.template.backends.django.DjangoTemplates object at 0x7fe914869400>]
    template_name
    'demo/broken_template.html'
    using
    None
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/backends/django.py, line 79, in get_template
    1.         return errors
    2.     def from_string(self, template_code):
    3.         return Template(self.engine.from_string(template_code), self)
    4.     def get_template(self, template_name):
    5.         try:
    1.             return Template(self.engine.get_template(template_name), self)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.         except TemplateDoesNotExist as exc:
    2.             reraise(exc, self)
    3.     def get_templatetag_libraries(self, custom_libraries):
    4.         """
    5.         Return a collation of template tag libraries from installed
    Local vars
    Variable Value
    self
    <django.template.backends.django.DjangoTemplates object at 0x7fe914869400>
    template_name
    'demo/broken_template.html'
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/engine.py, line 186, in get_template
    1.             template_name, _, partial_name = template_name.partition("#")
    2.         except AttributeError:
    3.             raise TemplateDoesNotExist(original_name)
    4.         if not template_name:
    5.             raise TemplateDoesNotExist(original_name)
    1.         template, origin = self.find_template(template_name)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.         if not hasattr(template, "render"):
    2.             # template needs to be compiled
    3.             template = Template(template, origin, template_name, engine=self)
    4.         if not partial_name:
    5.             return template
    Local vars
    Variable Value
    _
    ''
    original_name
    'demo/broken_template.html'
    partial_name
    ''
    self
    <Engine: app_dirs=True context_processors=['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages'] debug=True loaders=[('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])] string_if_invalid='' file_charset='utf-8' libraries={'cache': 'django.templatetags.cache', 'i18n': 'django.templatetags.i18n', 'l10n': 'django.templatetags.l10n', 'static': 'django.templatetags.static', 'tz': 'django.templatetags.tz', 'admin_list': 'django.contrib.admin.templatetags.admin_list', 'admin_modify': 'django.contrib.admin.templatetags.admin_modify', 'admin_urls': 'django.contrib.admin.templatetags.admin_urls', 'log': 'django.contrib.admin.templatetags.log', 'auth': 'django.contrib.auth.templatetags.auth', 'flatpages': 'django.contrib.flatpages.templatetags.flatpages'} builtins=['django.template.defaulttags', 'django.template.defaultfilters', 'django.template.loader_tags'] autoescape=True>
    template_name
    'demo/broken_template.html'
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/engine.py, line 159, in find_template
    1.                 "Invalid value in template loaders configuration: %r" % loader
    2.             )
    3.     def find_template(self, name, dirs=None, skip=None):
    4.         tried = []
    5.         for loader in self.template_loaders:
    6.             try:
    1.                 template = loader.get_template(name, skip=skip)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 return template, template.origin
    2.             except TemplateDoesNotExist as e:
    3.                 tried.extend(e.tried)
    4.         raise TemplateDoesNotExist(name, tried=tried)
    5.     def from_string(self, template_code):
    Local vars
    Variable Value
    dirs
    None
    loader
    <django.template.loaders.cached.Loader object at 0x7fe9134867b0>
    name
    'demo/broken_template.html'
    self
    <Engine: app_dirs=True context_processors=['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages'] debug=True loaders=[('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])] string_if_invalid='' file_charset='utf-8' libraries={'cache': 'django.templatetags.cache', 'i18n': 'django.templatetags.i18n', 'l10n': 'django.templatetags.l10n', 'static': 'django.templatetags.static', 'tz': 'django.templatetags.tz', 'admin_list': 'django.contrib.admin.templatetags.admin_list', 'admin_modify': 'django.contrib.admin.templatetags.admin_modify', 'admin_urls': 'django.contrib.admin.templatetags.admin_urls', 'log': 'django.contrib.admin.templatetags.log', 'auth': 'django.contrib.auth.templatetags.auth', 'flatpages': 'django.contrib.flatpages.templatetags.flatpages'} builtins=['django.template.defaulttags', 'django.template.defaultfilters', 'django.template.loader_tags'] autoescape=True>
    skip
    None
    tried
    []
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loaders/cached.py, line 57, in get_template
    1.             if isinstance(cached, type) and issubclass(cached, TemplateDoesNotExist):
    2.                 raise cached(template_name)
    3.             elif isinstance(cached, TemplateDoesNotExist):
    4.                 raise copy_exception(cached)
    5.             return cached
    6.         try:
    1.             template = super().get_template(template_name, skip)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.         except TemplateDoesNotExist as e:
    2.             self.get_template_cache[key] = (
    3.                 copy_exception(e) if self.engine.debug else TemplateDoesNotExist
    4.             )
    5.             raise
    6.         else:
    Local vars
    Variable Value
    __class__
    <class 'django.template.loaders.cached.Loader'>
    cached
    None
    key
    'demo/broken_template.html'
    self
    <django.template.loaders.cached.Loader object at 0x7fe9134867b0>
    skip
    None
    template_name
    'demo/broken_template.html'
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loaders/base.py, line 28, in get_template
    1.             try:
    2.                 contents = self.get_contents(origin)
    3.             except TemplateDoesNotExist:
    4.                 tried.append((origin, "Source does not exist"))
    5.                 continue
    6.             else:
    1.                 return Template(
                                 
    1.                     contents,
    2.                     origin,
    3.                     origin.template_name,
    4.                     self.engine,
    5.                 )
    Local vars
    Variable Value
    contents
    ('{% extends "demo/base.html" %}\n'
     '{% block title %}Broken template{% endblock %}\n'
     '{% block h1 %}Broken template{% endblock %}\n'
     '\n'
     '{% block content %}\n'
     '  <p>This is a test.</p>\n'
     '  <p>{% unknown_tag_name_foo %}</p>\n'
     '{% endblock %}\n')
    origin
    <Origin name='/home/runner/work/django_admin_tests/django_admin_tests/demo/templates/demo/broken_template.html'>
    self
    <django.template.loaders.cached.Loader object at 0x7fe9134867b0>
    skip
    None
    template_name
    'demo/broken_template.html'
    tried
    []
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 157, in __init__
    1.             engine = Engine.get_default()
    2.         if origin is None:
    3.             origin = Origin(UNKNOWN_SOURCE)
    4.         self.name = name
    5.         self.origin = origin
    6.         self.engine = engine
    7.         self.source = str(template_string)  # May be lazy.
    1.         self.nodelist = self.compile_nodelist()
                                   ^^^^^^^^^^^^^^^^^^^^^^^
    1.     def __repr__(self):
    2.         return '<%s template_string="%s...">' % (
    3.             self.__class__.__qualname__,
    4.             self.source[:20].replace("\n", ""),
    5.         )
    Local vars
    Variable Value
    engine
    <Engine: app_dirs=True context_processors=['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages'] debug=True loaders=[('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])] string_if_invalid='' file_charset='utf-8' libraries={'cache': 'django.templatetags.cache', 'i18n': 'django.templatetags.i18n', 'l10n': 'django.templatetags.l10n', 'static': 'django.templatetags.static', 'tz': 'django.templatetags.tz', 'admin_list': 'django.contrib.admin.templatetags.admin_list', 'admin_modify': 'django.contrib.admin.templatetags.admin_modify', 'admin_urls': 'django.contrib.admin.templatetags.admin_urls', 'log': 'django.contrib.admin.templatetags.log', 'auth': 'django.contrib.auth.templatetags.auth', 'flatpages': 'django.contrib.flatpages.templatetags.flatpages'} builtins=['django.template.defaulttags', 'django.template.defaultfilters', 'django.template.loader_tags'] autoescape=True>
    name
    'demo/broken_template.html'
    origin
    <Origin name='/home/runner/work/django_admin_tests/django_admin_tests/demo/templates/demo/broken_template.html'>
    self
    <Template template_string="{% extends "demo/bas...">
    template_string
    ('{% extends "demo/base.html" %}\n'
     '{% block title %}Broken template{% endblock %}\n'
     '{% block h1 %}Broken template{% endblock %}\n'
     '\n'
     '{% block content %}\n'
     '  <p>This is a test.</p>\n'
     '  <p>{% unknown_tag_name_foo %}</p>\n'
     '{% endblock %}\n')
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 199, in compile_nodelist
    1.             tokens,
    2.             self.engine.template_libraries,
    3.             self.engine.template_builtins,
    4.             self.origin,
    5.         )
    6.         try:
    1.             nodelist = parser.parse()
                                  ^^^^^^^^^^^^^^
    1.             self.extra_data = parser.extra_data
    2.             return nodelist
    3.         except Exception as e:
    4.             if self.engine.debug:
    5.                 e.template_debug = self.get_exception_info(e, e.token)
    6.             if (
    Local vars
    Variable Value
    lexer
    <DebugLexer template_string="{% extends "demo/bas...", verbatim=False>
    parser
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    raw_message
    ("Invalid block tag on line 7: 'unknown_tag_name_foo', expected 'endblock'. "
     'Did you forget to register or load this tag?')
    self
    <Template template_string="{% extends "demo/bas...">
    tokens
    [<Block token: "extends "demo/base.h...">,
     <Text token: "...">,
     <Block token: "block title...">,
     <Text token: "Broken template...">,
     <Block token: "endblock...">,
     <Text token: "...">,
     <Block token: "block h1...">,
     <Text token: "Broken template...">,
     <Block token: "endblock...">,
     <Text token: "...">,
     <Block token: "block content...">,
     <Text token: "  <p>This is a test...">,
     <Block token: "unknown_tag_name_foo...">,
     <Text token: "</p>...">,
     <Block token: "endblock...">,
     <Text token: "...">]
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 585, in parse
    1.                 except KeyError:
    2.                     self.invalid_block_tag(token, command, parse_until)
    3.                 # Compile the callback into a node object and add it to
    4.                 # the node list.
    5.                 try:
    6.                     compiled_result = compile_func(self, token)
    7.                 except Exception as e:
    1.                     raise self.error(token, e)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 self.extend_nodelist(nodelist, compiled_result, token)
    2.                 # Compile success. Remove the token from the command stack.
    3.                 self.command_stack.pop()
    4.         if parse_until:
    5.             self.unclosed_block_tag(parse_until)
    6.         return nodelist
    Local vars
    Variable Value
    command
    'extends'
    compile_func
    <function do_extends at 0x7fe9151380f0>
    nodelist
    []
    parse_until
    []
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "extends "demo/base.h...">
    token_type
    2
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 583, in parse
    1.                 try:
    2.                     compile_func = self.tags[command]
    3.                 except KeyError:
    4.                     self.invalid_block_tag(token, command, parse_until)
    5.                 # Compile the callback into a node object and add it to
    6.                 # the node list.
    7.                 try:
    1.                     compiled_result = compile_func(self, token)
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 except Exception as e:
    2.                     raise self.error(token, e)
    3.                 self.extend_nodelist(nodelist, compiled_result, token)
    4.                 # Compile success. Remove the token from the command stack.
    5.                 self.command_stack.pop()
    6.         if parse_until:
    Local vars
    Variable Value
    command
    'extends'
    compile_func
    <function do_extends at 0x7fe9151380f0>
    nodelist
    []
    parse_until
    []
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "extends "demo/base.h...">
    token_type
    2
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loader_tags.py, line 307, in do_extends
    1.     the parent template itself (if it evaluates to a Template object).
    2.     """
    3.     bits = token.split_contents()
    4.     if len(bits) != 2:
    5.         raise TemplateSyntaxError("'%s' takes one argument" % bits[0])
    6.     bits[1] = construct_relative_path(parser.origin.template_name, bits[1])
    7.     parent_name = parser.compile_filter(bits[1])
    1.     nodelist = parser.parse()
                          ^^^^^^^^^^^^^^
    1.     if nodelist.get_nodes_by_type(ExtendsNode):
    2.         raise TemplateSyntaxError(
    3.             "'%s' cannot appear more than once in the same template" % bits[0]
    4.         )
    5.     return ExtendsNode(nodelist, parent_name)
    Local vars
    Variable Value
    bits
    ['extends', '"demo/base.html"']
    parent_name
    <FilterExpression '"demo/base.html"'>
    parser
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "extends "demo/base.h...">
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 585, in parse
    1.                 except KeyError:
    2.                     self.invalid_block_tag(token, command, parse_until)
    3.                 # Compile the callback into a node object and add it to
    4.                 # the node list.
    5.                 try:
    6.                     compiled_result = compile_func(self, token)
    7.                 except Exception as e:
    1.                     raise self.error(token, e)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 self.extend_nodelist(nodelist, compiled_result, token)
    2.                 # Compile success. Remove the token from the command stack.
    3.                 self.command_stack.pop()
    4.         if parse_until:
    5.             self.unclosed_block_tag(parse_until)
    6.         return nodelist
    Local vars
    Variable Value
    command
    'block'
    compile_func
    <function do_block at 0x7fe91512fed0>
    compiled_result
    <Block Node: h1. Contents: [<TextNode: 'Broken template'>]>
    nodelist
    [<TextNode: '\n'>,
     <Block Node: title. Contents: [<TextNode: 'Broken template'>]>,
     <TextNode: '\n'>,
     <Block Node: h1. Contents: [<TextNode: 'Broken template'>]>,
     <TextNode: '\n\n'>]
    parse_until
    []
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "block content...">
    token_type
    2
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 583, in parse
    1.                 try:
    2.                     compile_func = self.tags[command]
    3.                 except KeyError:
    4.                     self.invalid_block_tag(token, command, parse_until)
    5.                 # Compile the callback into a node object and add it to
    6.                 # the node list.
    7.                 try:
    1.                     compiled_result = compile_func(self, token)
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 except Exception as e:
    2.                     raise self.error(token, e)
    3.                 self.extend_nodelist(nodelist, compiled_result, token)
    4.                 # Compile success. Remove the token from the command stack.
    5.                 self.command_stack.pop()
    6.         if parse_until:
    Local vars
    Variable Value
    command
    'block'
    compile_func
    <function do_block at 0x7fe91512fed0>
    compiled_result
    <Block Node: h1. Contents: [<TextNode: 'Broken template'>]>
    nodelist
    [<TextNode: '\n'>,
     <Block Node: title. Contents: [<TextNode: 'Broken template'>]>,
     <TextNode: '\n'>,
     <Block Node: h1. Contents: [<TextNode: 'Broken template'>]>,
     <TextNode: '\n\n'>]
    parse_until
    []
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "block content...">
    token_type
    2
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/loader_tags.py, line 235, in do_block
    1.         if block_name in parser.__loaded_blocks:
    2.             raise TemplateSyntaxError(
    3.                 "'%s' tag with name '%s' appears more than once" % (bits[0], block_name)
    4.             )
    5.         parser.__loaded_blocks.append(block_name)
    6.     except AttributeError:  # parser.__loaded_blocks isn't a list yet
    7.         parser.__loaded_blocks = [block_name]
    1.     nodelist = parser.parse(("endblock",))
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.     # This check is kept for backwards-compatibility. See #3100.
    2.     endblock = parser.next_token()
    3.     acceptable_endblocks = ("endblock", "endblock %s" % block_name)
    4.     if endblock.contents not in acceptable_endblocks:
    5.         parser.invalid_block_tag(endblock, "endblock", acceptable_endblocks)
    Local vars
    Variable Value
    bits
    ['block', 'content']
    block_name
    'content'
    parser
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "block content...">
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 579, in parse
    1.                 # tag.
    2.                 self.command_stack.append((command, token))
    3.                 # Get the tag callback function from the ones registered with
    4.                 # the parser.
    5.                 try:
    6.                     compile_func = self.tags[command]
    7.                 except KeyError:
    1.                     self.invalid_block_tag(token, command, parse_until)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    1.                 # Compile the callback into a node object and add it to
    2.                 # the node list.
    3.                 try:
    4.                     compiled_result = compile_func(self, token)
    5.                 except Exception as e:
    6.                     raise self.error(token, e)
    Local vars
    Variable Value
    command
    'unknown_tag_name_foo'
    nodelist
    [<TextNode: '\n  <p>This is a test.</p>'>]
    parse_until
    ('endblock',)
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "unknown_tag_name_foo...">
    token_type
    2
  • /home/runner/work/django_admin_tests/django_admin_tests/.venv/src/django/django/template/base.py, line 634, in invalid_block_tag
    1.             e = TemplateSyntaxError(e)
    2.         if not hasattr(e, "token"):
    3.             e.token = token
    4.         return e
    5.     def invalid_block_tag(self, token, command, parse_until=None):
    6.         if parse_until:
    1.             raise self.error(
                       ^
    1.                 token,
    2.                 "Invalid block tag on line %d: '%s', expected %s. Did you "
    3.                 "forget to register or load this tag?"
    4.                 % (
    5.                     token.lineno,
    6.                     command,
    Local vars
    Variable Value
    command
    'unknown_tag_name_foo'
    parse_until
    ('endblock',)
    self
    <Parser tokens=[<Text token: "...">, <Block token: "endblock...">, <Text token: "</p>...">]>
    token
    <Block token: "unknown_tag_name_foo...">


Request information

USER

AnonymousUser

GET

No GET data

POST

No POST data

FILES

No FILES data

No cookie data

META

Variable Value
SERVER_NAME
'Hello'
SERVER_PORT
1337

Settings

Using settings module demo.settings

Setting Value
ABSOLUTE_URL_OVERRIDES
{}
ADMINS
[]
ALLOWED_HOSTS
['*']
APPEND_SLASH
True
AUTHENTICATION_BACKENDS
'********************'
AUTH_PASSWORD_VALIDATORS
'********************'
AUTH_USER_MODEL
'********************'
BASE_DIR
PosixPath('/home/runner/work/django_admin_tests/django_admin_tests')
CACHES
{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS
'default'
CACHE_MIDDLEWARE_KEY_PREFIX
'********************'
CACHE_MIDDLEWARE_SECONDS
600
CSRF_COOKIE_AGE
31449600
CSRF_COOKIE_DOMAIN
None
CSRF_COOKIE_HTTPONLY
False
CSRF_COOKIE_NAME
'csrftoken'
CSRF_COOKIE_PATH
'/'
CSRF_COOKIE_SAMESITE
'Lax'
CSRF_COOKIE_SECURE
False
CSRF_FAILURE_VIEW
'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME
'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS
[]
CSRF_USE_SESSIONS
False
DATABASES
{'default': {'ATOMIC_REQUESTS': False,
             'AUTOCOMMIT': True,
             'CONN_HEALTH_CHECKS': False,
             'CONN_MAX_AGE': 0,
             'ENGINE': 'django.db.backends.sqlite3',
             'HOST': '',
             'NAME': PosixPath('/home/runner/work/django_admin_tests/django_admin_tests/db.sqlite3'),
             'OPTIONS': {},
             'PASSWORD': '********************',
             'PORT': '',
             'TEST': {'CHARSET': None,
                      'COLLATION': None,
                      'MIGRATE': True,
                      'MIRROR': None,
                      'NAME': None},
             'TIME_ZONE': None,
             'USER': ''}}
DATABASE_ROUTERS
[]
DATA_UPLOAD_MAX_MEMORY_SIZE
2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS
1200
DATA_UPLOAD_MAX_NUMBER_FILES
100
DATETIME_FORMAT
'N j, Y, P'
DATETIME_INPUT_FORMATS
['%Y-%m-%d %H:%M:%S',
 '%Y-%m-%d %H:%M:%S.%f',
 '%Y-%m-%d %H:%M',
 '%m/%d/%Y %H:%M:%S',
 '%m/%d/%Y %H:%M:%S.%f',
 '%m/%d/%Y %H:%M',
 '%m/%d/%y %H:%M:%S',
 '%m/%d/%y %H:%M:%S.%f',
 '%m/%d/%y %H:%M']
DATE_FORMAT
'N j, Y'
DATE_INPUT_FORMATS
['%Y-%m-%d',
 '%m/%d/%Y',
 '%m/%d/%y',
 '%b %d %Y',
 '%b %d, %Y',
 '%d %b %Y',
 '%d %b, %Y',
 '%B %d %Y',
 '%B %d, %Y',
 '%d %B %Y',
 '%d %B, %Y']
DEBUG
True
DEBUG_PROPAGATE_EXCEPTIONS
False
DEBUG_TOOLBAR_CONFIG
{'SHOW_TOOLBAR_CALLBACK': <function <lambda> at 0x7fe915ddcd50>}
DECIMAL_SEPARATOR
'.'
DEFAULT_AUTO_FIELD
'django.db.models.BigAutoField'
DEFAULT_CHARSET
'utf-8'
DEFAULT_EXCEPTION_REPORTER
'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FROM_EMAIL
'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE
''
DEFAULT_TABLESPACE
''
DISALLOWED_USER_AGENTS
[]
EMAIL_BACKEND
'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST
'localhost'
EMAIL_HOST_PASSWORD
'********************'
EMAIL_HOST_USER
''
EMAIL_PORT
25
EMAIL_SSL_CERTFILE
None
EMAIL_SSL_KEYFILE
'********************'
EMAIL_SUBJECT_PREFIX
'[Django] '
EMAIL_TIMEOUT
None
EMAIL_USE_LOCALTIME
False
EMAIL_USE_SSL
False
EMAIL_USE_TLS
False
FILE_UPLOAD_DIRECTORY_PERMISSIONS
None
FILE_UPLOAD_HANDLERS
['django.core.files.uploadhandler.MemoryFileUploadHandler',
 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE
2621440
FILE_UPLOAD_PERMISSIONS
420
FILE_UPLOAD_TEMP_DIR
None
FIRST_DAY_OF_WEEK
0
FIXTURE_DIRS
[]
FORCE_SCRIPT_NAME
None
FORMAT_MODULE_PATH
None
FORM_RENDERER
'django.forms.renderers.DjangoTemplates'
IGNORABLE_404_URLS
[]
INSTALLED_APPS
['demo',
 'debug_toolbar',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.redirects',
 'django.contrib.sites',
 'django.contrib.admindocs',
 'django.contrib.flatpages']
INTERNAL_IPS
['127.0.0.1']
LANGUAGES
[('af', 'Afrikaans'),
 ('ar', 'Arabic'),
 ('ar-dz', 'Algerian Arabic'),
 ('ast', 'Asturian'),
 ('az', 'Azerbaijani'),
 ('bg', 'Bulgarian'),
 ('be', 'Belarusian'),
 ('bn', 'Bengali'),
 ('br', 'Breton'),
 ('bs', 'Bosnian'),
 ('ca', 'Catalan'),
 ('ckb', 'Central Kurdish (Sorani)'),
 ('cs', 'Czech'),
 ('cy', 'Welsh'),
 ('da', 'Danish'),
 ('de', 'German'),
 ('dsb', 'Lower Sorbian'),
 ('el', 'Greek'),
 ('en', 'English'),
 ('en-au', 'Australian English'),
 ('en-gb', 'British English'),
 ('eo', 'Esperanto'),
 ('es', 'Spanish'),
 ('es-ar', 'Argentinian Spanish'),
 ('es-co', 'Colombian Spanish'),
 ('es-mx', 'Mexican Spanish'),
 ('es-ni', 'Nicaraguan Spanish'),
 ('es-ve', 'Venezuelan Spanish'),
 ('et', 'Estonian'),
 ('eu', 'Basque'),
 ('fa', 'Persian'),
 ('fi', 'Finnish'),
 ('fr', 'French'),
 ('fy', 'Frisian'),
 ('ga', 'Irish'),
 ('gd', 'Scottish Gaelic'),
 ('gl', 'Galician'),
 ('he', 'Hebrew'),
 ('hi', 'Hindi'),
 ('hr', 'Croatian'),
 ('hsb', 'Upper Sorbian'),
 ('ht', 'Haitian Creole'),
 ('hu', 'Hungarian'),
 ('hy', 'Armenian'),
 ('ia', 'Interlingua'),
 ('id', 'Indonesian'),
 ('ig', 'Igbo'),
 ('io', 'Ido'),
 ('is', 'Icelandic'),
 ('it', 'Italian'),
 ('ja', 'Japanese'),
 ('ka', 'Georgian'),
 ('kab', 'Kabyle'),
 ('kk', 'Kazakh'),
 ('km', 'Khmer'),
 ('kn', 'Kannada'),
 ('ko', 'Korean'),
 ('ky', 'Kyrgyz'),
 ('lb', 'Luxembourgish'),
 ('lt', 'Lithuanian'),
 ('lv', 'Latvian'),
 ('mk', 'Macedonian'),
 ('ml', 'Malayalam'),
 ('mn', 'Mongolian'),
 ('mr', 'Marathi'),
 ('ms', 'Malay'),
 ('my', 'Burmese'),
 ('nb', 'Norwegian Bokmål'),
 ('ne', 'Nepali'),
 ('nl', 'Dutch'),
 ('nn', 'Norwegian Nynorsk'),
 ('os', 'Ossetic'),
 ('pa', 'Punjabi'),
 ('pl', 'Polish'),
 ('pt', 'Portuguese'),
 ('pt-br', 'Brazilian Portuguese'),
 ('ro', 'Romanian'),
 ('ru', 'Russian'),
 ('sk', 'Slovak'),
 ('sl', 'Slovenian'),
 ('sq', 'Albanian'),
 ('sr', 'Serbian'),
 ('sr-latn', 'Serbian Latin'),
 ('sv', 'Swedish'),
 ('sw', 'Swahili'),
 ('ta', 'Tamil'),
 ('te', 'Telugu'),
 ('tg', 'Tajik'),
 ('th', 'Thai'),
 ('tk', 'Turkmen'),
 ('tr', 'Turkish'),
 ('tt', 'Tatar'),
 ('udm', 'Udmurt'),
 ('ug', 'Uyghur'),
 ('uk', 'Ukrainian'),
 ('ur', 'Urdu'),
 ('uz', 'Uzbek'),
 ('vi', 'Vietnamese'),
 ('zh-hans', 'Simplified Chinese'),
 ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI
['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur']
LANGUAGE_CODE
'en-us'
LANGUAGE_COOKIE_AGE
None
LANGUAGE_COOKIE_DOMAIN
None
LANGUAGE_COOKIE_HTTPONLY
False
LANGUAGE_COOKIE_NAME
'django_language'
LANGUAGE_COOKIE_PATH
'/'
LANGUAGE_COOKIE_SAMESITE
None
LANGUAGE_COOKIE_SECURE
False
LOCALE_PATHS
[]
LOGGING
{}
LOGGING_CONFIG
'logging.config.dictConfig'
LOGIN_REDIRECT_URL
'/accounts/profile/'
LOGIN_URL
'/accounts/login/'
LOGOUT_REDIRECT_URL
None
MANAGERS
[]
MEDIA_ROOT
''
MEDIA_URL
'/'
MESSAGE_STORAGE
'django.contrib.messages.storage.fallback.FallbackStorage'
MIDDLEWARE
['debug_toolbar.middleware.DebugToolbarMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'demo.middleware.AutoLoginMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.locale.LocaleMiddleware']
MIGRATION_MODULES
{'debug_toolbar': None}
MONTH_DAY_FORMAT
'F j'
NUMBER_GROUPING
0
PASSWORD_HASHERS
'********************'
PASSWORD_RESET_TIMEOUT
'********************'
PREPEND_WWW
False
ROOT_URLCONF
'demo.urls'
SECRET_KEY
'********************'
SECRET_KEY_FALLBACKS
'********************'
SECURE_CONTENT_TYPE_NOSNIFF
True
SECURE_CROSS_ORIGIN_OPENER_POLICY
'same-origin'
SECURE_CSP
{}
SECURE_CSP_REPORT_ONLY
{}
SECURE_HSTS_INCLUDE_SUBDOMAINS
False
SECURE_HSTS_PRELOAD
False
SECURE_HSTS_SECONDS
0
SECURE_PROXY_SSL_HEADER
None
SECURE_REDIRECT_EXEMPT
[]
SECURE_REFERRER_POLICY
'same-origin'
SECURE_SSL_HOST
None
SECURE_SSL_REDIRECT
False
SERVER_EMAIL
'root@localhost'
SESSION_CACHE_ALIAS
'default'
SESSION_COOKIE_AGE
1209600
SESSION_COOKIE_DOMAIN
None
SESSION_COOKIE_HTTPONLY
False
SESSION_COOKIE_NAME
'sessionid'
SESSION_COOKIE_PATH
'/'
SESSION_COOKIE_SAMESITE
'Lax'
SESSION_COOKIE_SECURE
False
SESSION_ENGINE
'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE
False
SESSION_FILE_PATH
None
SESSION_SAVE_EVERY_REQUEST
False
SESSION_SERIALIZER
'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE
'demo.settings'
SHORT_DATETIME_FORMAT
'm/d/Y P'
SHORT_DATE_FORMAT
'm/d/Y'
SIGNING_BACKEND
'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS
[]
SITE_ID
1
STATICFILES_DIRS
[]
STATICFILES_FINDERS
['django.contrib.staticfiles.finders.FileSystemFinder',
 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATIC_ROOT
PosixPath('/home/runner/work/django_admin_tests/django_admin_tests/static')
STATIC_URL
'/django_admin_tests/latest/english/static/'
STORAGES
{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TASKS
{'default': {'BACKEND': 'django.tasks.backends.immediate.ImmediateBackend'}}
TEMPLATES
[{'APP_DIRS': True,
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [],
  'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
                                     'django.template.context_processors.request',
                                     'django.contrib.auth.context_processors.auth',
                                     'django.contrib.messages.context_processors.messages']}}]
TEST_NON_SERIALIZED_APPS
[]
TEST_RUNNER
'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR
','
TIME_FORMAT
'P'
TIME_INPUT_FORMATS
['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE
'UTC'
URLIZE_ASSUME_HTTPS
False
USE_I18N
True
USE_L10N
True
USE_THOUSAND_SEPARATOR
False
USE_TZ
True
USE_X_FORWARDED_HOST
False
USE_X_FORWARDED_PORT
False
VARIANT
'English'
VARIANTS
['English', 'German', 'Arabic']
VERSION_NUMBER
'latest'
VERSION_NUMBERS
{'latest': 'v6.1.dev20251204163722',
 'v2.2': 'v2.2',
 'v3.0': 'v3.0',
 'v3.1': 'v3.1',
 'v3.2': 'v3.2',
 'v4.0': 'v4.0',
 'v4.1': 'v4.1',
 'v4.2': 'v4.2',
 'v5.0': 'v5.0',
 'v5.1': 'v5.1',
 'v5.2': 'v5.2'}
WSGI_APPLICATION
'demo.wsgi.application'
X_FRAME_OPTIONS
'DENY'
YEAR_MONTH_FORMAT
'F Y'
DJDT

History

Versions

Time

Settings from demo.settings

Headers

Request

SQL queries from 0 connections

Static files (0 found, 0 used)

Templates (1 rendered)

Alerts

Cache calls from 1 backend

Signals

Community