[Zope] Getting a document's contents

2000-08-15 Thread Joshua Brauer


There is probably a simple solution that I'm overlooking here

I have a folder (Parts) that contains dtml documents that are snippets of code. I want 
to include some of them which I have listed in a variable (select).

So I use code like this:

dtml-with parts
dtml-in select
dtml-var "_.getitem('sequence-item')"
/dtml-in
/dtml-with

or this

dtml-with parts
dtml-in select
dtml-var sequence-item
/dtml-in
/dtml-with


In either case I get the name of sequence-item but I want the contents of sequence-item

Josh
-- 
-
Joshua Brauer
Computer Support Scientist
Department of Biochemistry and Molecular Biology
Colorado State University
Fort Collins, CO 80523
(970) 491-1080/pager:  (970) 498-7995, #5837
-

___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )




Re: [Zope] Getting a document's contents

2000-08-15 Thread R. David Murray

On Tue, 15 Aug 2000, Joshua Brauer wrote:
 I have a folder (Parts) that contains dtml documents that are snippets of code. I 
want to include some of them which I have listed in a variable (select).
 
 So I use code like this:
 
 dtml-with parts
 dtml-in select
 dtml-var "_.getitem('sequence-item')"
 /dtml-in
 /dtml-with

Right idea, but not quite there.  Your 'select' variable holds the
string ids of the objects, but you need the actual objects in order
to get them rendered.  getitem will look up the object given the
id, but you're actually telling it here to look up the value (in
the namespace) of the string 'sequence-item'.  What you get, as
you observed, is the id string stored at that moment in sequence-item.
So you need to loose the quotes so it will look up that id string
in the namespace.  However, there's a wrinkle:  sequence-item
is not a valid python variable name.  So you have to look sequence-item
up in the namespace after all.  You could do:

dtml-var "_.getitem(_.getitem('sequence-item'))"

However, Zope provides a shortcut for this, using the namespace variable
(_) as a dictionary:

dtml-var "_.getitem(_['sequence-item'])"

This, though, is going to *just* retrieve the object, it won't cause
it to render (I think you'll get the DTML source, which I think is
the representation of the object as string, which is the default
conversion in this context grin).

So what you a really want to do is execute the object after you've
retreived it, which will case it (unless it is a ZClass that is
not subclassed from Renderable) to render itself, which is what
I think you want.  To do that you pass a true flag to getitem as
its second argument:

dtml-var "_.getitem(_['sequence-itmem'],1)"

Now, _ has this additional feature (Chris Whithers would say bug) that it
calls any callable object it is asked to retrieve via the dictionary lookup.
So you should be able to shorten this to:

dtml-var "_[_['sequence-item]]"

There's one more subtlety (are you getting tired of this yet?) involving
the need to pass the namespace to called DTML methods, but
I believe _ takes care of that for you in this example so I won't
go into it.  But it's a FAQ, too, so you might want to look for
the answer before it bites you grin.

--RDM


___
Zope maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope-dev )