The Zope ORB works downward through the object hierarchy examining objects until it finds the requested object. Acquisition works upward through the object hierarchy binding methods and attributes to called objects. DTML namespaces similarly form a dynamic stack of objects which are consulted in order to find template variables. The DTML namespace stack differs from object publishing and acquisition in that it is not tied to the object hierarchy. The stack is constructed initially by calling a DTML object, and then is modified dynamically in the body of the template.
Indirect lookup is just a question of consulting the namespace and asking it if it has a variable.
In DTML the way to do this is with the special variable whose name is underscore. The underscore variable has a getitem method, and also can be treated like a mapping to access the namespace's variables. All do pretty much the same thing. We'll discuss rendering later. Just for completeness we should mention that the getitem method takes and optional second argument which indicates whether to render or not.