[Zope] Getting error assigning sequence-item to REQUEST
Tres Seaver
tseaver@palladion.com
Sat, 15 Apr 2000 19:09:40 -0500
Richard Moon <richard@dcs.co.uk> wrote:
>
> Can anyone tell me why the following
> <dtml-in "_.string.split(tune_name,'|')">
> <dtml-if sequence-start>
> <dtml-call expr="REQUEST.set('tune_name',sequence-item)">
>
> raises the error "Error Type: Name Error Error Value:sequence"
>
> It is the last line which raises the error.
>
> This is the error I would expect if I was trying to use a variable which
> wasn't in the current namespace so I am confused why I cannot use
> sequence-item in this way.
>
> Can anyone tell me the correct syntax (and why ) ?
Inside 'expr="..."', you are speaking Python, and the sequence variables,
which have names which are illegal as Python identifiers, cannot be referenced
directly.
The correct syntax would be::
<dtml-in "_.string.split(tune_name,'|')">
<dtml-if sequence-start>
<dtml-call expr="REQUEST.set('tune_name',_['sequence-item'])">
which uses the "_" variable representing the current namespace. An
alternative is to use <dtml-let> to alias the sequence variables, like so::
<dtml-in "_.string.split(tune_name,'|')">
<dtml-let si=sequence-item>
<dtml-if sequence-start>
<dtml-call expr="REQUEST.set('tune_name',si)">
This oddness is an historical artefact: the sequence variables got their
names long before DTML got the expr="" syntax. There is a proposal in the
DTML wiki (look under http://www.zope.org/WikiCentral to find it) to add
syntax to the <dtml-in> tag which will make all this unnecessary.
Hope that helps,
Tres.
--
=========================================================
Tres Seaver tseaver@digicool.com tseaver@palladion.com