On Fri, Sep 29, 2006 at 09:00:16AM +0200, Daniel de la Cuesta wrote: > path="animals" > items=len(context.sections.path.contentValues()) > > > When I try to run the script I get an error saying that the variable "path" > is not present. > > If i do: > > items=len(context.sections.animals.contentValues()) > > everything is ok, > > How can I refer to a variable into a path expression in a Python Based Script?
On the surface this isn't really a zope question, it's basic Python. You're looking for the getattr() builtin function. For example: [EMAIL PROTECTED] ~ $ python Python 2.4.3 (#1, Jul 27 2006, 13:07:44) [GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class Foo: ... bar = 1 ... >>> foo = Foo() >>> foo.bar 1 >>> path = 'bar' >>> foo.path Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: Foo instance has no attribute 'path' >>> getattr(foo, path) 1 Of course, Zope 2 has to complicate things a bit :) Zope's ObjectManagers, such as Folders, also allow you to use dictionary syntax to access their children. So you can do foo[path] as well. There is a semantic difference, though, in Zope 2: * attribute access like getattr(foo, 'bar'), or foo.bar, falls back to using acquisition to look for 'bar' in foo's parent folders. * Item access (like foo['bar']) does not use acquisition, so you'd get an immediate KeyError if foo does not contain the named object. I recommend using item access in all cases except when you know for sure that you want to use acquisition. Acquisition bugs can be big time-wasters - e.g. accidentally acquiring a slightly different object than the one you wanted to use, because the one you expected to find happens to be missing, or a site admin renamed it, or some such. -- Paul Winkler http://www.slinkp.com _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )