Terse Syntax through External Methods

Diez B. Roggisch deets at nospam.web.de
Fri Jan 25 15:19:50 CET 2008


Jens schrieb:
> Hello Everyone
> 
> I'm newbie to Zope and i have a few questions regarding external
> methods. What i wan't to do
> is provide a terse syntax for converting  urls to special tracking
> urls:
> 
> <dtml-var "track('http://myurl/')">
> 
> turns the provided url into something like
> 
> http://host/tracking?url=http%3A%2F%2Fmyurl%2F
> 
> in the output.
> 
> i've been trying to use a external procedure like this.
> 
> ## Script (Python) "track_link"
> ##bind container=container
> ##bind context=context
> ##bind namespace=_
> ##bind script=script
> ##bind subpath=traverse_subpath
> ##parameters=self,url
> ##title=track link
> ##
> return "%s%s" % (self.tracking_prefix, url_quote(url))
> 
> This doesn't work because because the method doesn't have access to
> the environment. Obviously I don't wan't to pass everything explicitly
> into the function as this would defeat the purpose of the exercise,
> namely to provide a terse syntax.
> 
> I have a background in other languages so I might be missing something
> conceptually with regard Zope and DTML.. Is there a better was of
> doing this, perhaps without using external methods? Currently im doing
> the following which isn't very elegant:
> 
> in content document
> <a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
> tracking></dtml-let>">link</a>
> ...
> tracking:
> <dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>
> 
> Appreciate any input you might have on this-

Is it really needed to use an external method for this, or isn't a 
"normal" python script enough already?

If it has to be an External method, you can't access such a context 
AFAIK. But then you can create a python script that _has_ this context, 
and passese it to the external method. Not the nicest solution, but 
should work.

Diez



More information about the Python-list mailing list