Don Hopkins recently found that "REQUEST.set" does not work as expected inside "<dtml-with REQUEST>". I replied:
Don Hopkins writes:
... wrong value shown inside "<dtml-with REQUEST>" ...
I have a work around for you:
<dtml-with REQUEST mapping>
will work as expected.
However, I do not understand this behaviour:
The difference between "<dtml-with REQUEST>" and "<dtml-with REQUEST mapping>" is that in the first case "REQUEST" is wrapped into an "InstanceDict" before it is pushed onto the namespace while in the second case it is pushed itself (unwrapped).
"InstanceDict" is a wrapper that maps "getitem" onto the wrapped object's "getattr".
But, because "REQUEST" maps its "getattr" to its "getitem", there should not be a big difference. Should, as you see there is one....
I now do understand the behaviour: "InstanceDict" instances are caching the values they returned! This has wide ramifications, for example: * "REQUEST.set" apparently ineffective inside "dtml-with REQUEST" (as Don found out) * modifications to properties apparently ineffective I am no longer sure, I should consider this a bug (as I did in the previous message). But at least, it requires a big warning sign in the Zope book and other DTML related documentation. That's the reason, I send this message to you, too, Chris. Dieter