Django: какой контекст принадлежит какому шаблону - PullRequest
1 голос
/ 26 декабря 2009

Я нахожусь на грани тестирования атрибутов в response.context с собственным тестовым клиентом django (в django.test.client).

Я вернусь 5 response.context. Как кажется, для каждой части шаблона, потому что, когда я удаляю вложенную часть шаблона (например, {% include "sometemplate.html" %}) из базового шаблона, количество возвращаемого контекста уменьшается.

Переменные, передаваемые в шаблон рендерера, находятся в response.context[0].dicts[0]

Имя визуализированного шаблона хранится где-то в объекте контекста?

1 Ответ

2 голосов
/ 26 декабря 2009

Нет. Контекст (который в основном представляет собой массив dicts) передается в шаблонизатор вместе с именем шаблона. Хотя можно установить значение контекста, содержащее имя шаблона, внутри шаблона, это не происходит автоматически.

Просматривая код в django / template / loader_tags.py, я заметил, что class BlockNode делает context.push() перед рендерингом его содержимого и context.pop() после. Это исключает возможность установки значений внутри одной замены блока и последующего использования этого значения внутри другой замены блока. Это происходит не слишком часто, поскольку язык шаблонов Django напрямую не поддерживает присвоение значений, кроме как с помощью тега {% with%} (который, что интересно, выполняет те же операции push / pop, что и тег {% block%} ).

class IncludeNode подклассы class Node, но не class BlockNode, поэтому в данном случае не происходит никакого вложения контекстов.

...