"Christopher J. Kucera" <ckucera@globalcrossing.com> wrote:
To: zope@zope.org Subject: [Zope] Behavior of <dtml-let>
I discovered an interesting attribute of <dtml-let> after it was biting me on the nose for awhile. I've got a property, "db_Columns", of type "lines." In my code, I do the following:
<dtml-let columns="db_Columns"> ... <dtml-call "columns.append('blahblahblah')"> ... </dtml-let>
The append works wonderfully for my "local" variable columns, but as it turns out, it also appends 'blahblahblah' to "db_Columns".
I totally understand why this happens, and it certainly makes sense for <dtml-let> to function this way; I just thought that some mention of this feature in the DTML Reference guide (or some such document) could save someone else the trouble of tracking down why a screen is rendering very oddly.
Hmm, let + mutable objects.... To avoid the problem, I'd try:: <dtml-let columns="db_Columns[:]"> which should "clone" the list, instead of merely binding another name to it. Mutable "global" objects (lists, dictionaries, maybe instances?) inside DTML (or PythonMethods) are kind of a gnarly problem. Tres. -- ========================================================= Tres Seaver tseaver@palladion.com 713-523-6582 Palladion Software http://www.palladion.com