﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35417	RequestContext.new creates a context that cannot be flattened	Lily Foote	George Kussumoto	"In [https://github.com/django/django/blob/c187f5f9242b681abaa199173e02066997439425/django/template/library.py#L273 InclusionNode.render] Django creates a {{{new_context}}} from two existing contexts ({{{context}}} and {{{_dict}}}) by calling {{{new_context = context.new(_dict)}}}. These can both be instances of {{{RequestContext}}} leading to {{{new_context}}} also being a {{{RequestContext}}} (I have not tried with any other context types). However, calling {{{new_context.flatten()}}} raises a {{{ValueError}}}:

{{{
ValueError: dictionary update sequence element #0 has length 1; 2 is required
}}}

I can reproduce this in a small test:

{{{
from django.template.context import RequestContext
from django.test import RequestFactory, TestCase


class RequestContextTestCase(TestCase):
    def test_flatten_request_context_new(self):
        factory = RequestFactory()

        request = factory.get(""/foo/"")
        context = RequestContext(request)
        context_2 = RequestContext(request)
        context_3 = context.new(context_2)

        self.assertEqual(
            context_3.flatten(), {""False"": False, ""None"": None, ""True"": True}
        )
}}}

I discovered this when running Kolo on a Django admin view (http://127.0.0.1:8000/admin/auth/user/). Kolo calls {{{context.flatten()}}} internally when introspecting a template during rendering, which leads to this exception:

{{{
Traceback (most recent call last):
  File ""/home/lily/work/kloppindustries/kolo/python/src/kolo/profiler.py"", line 170, in __call__
    frame_data = processor.process(
                 ^^^^^^^^^^^^^^^^^^
  File ""/home/lily/work/kloppindustries/kolo/python/src/kolo/plugins.py"", line 107, in process
    data.update(self.process_extra(frame, event, arg, self.context))
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/lily/work/kloppindustries/kolo/python/src/kolo/filters/django.py"", line 89, in process_django_template
    template_context = template_context.flatten()
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/lily/.local/share/lilyenv/virtualenvs/kolo-sandbox/3.12/lib/python3.12/site-packages/django/template/context.py"", line 120, in flatten
    flat.update(d)
ValueError: dictionary update sequence element #0 has length 3; 2 is required
}}}

This is similar to #24765 and #26041."	Bug	closed	Template system	5.0	Normal	fixed			Ready for checkin	1	0	0	0	0	0
