Terse Syntax through External Methods

J

Jens

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://myurl/

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-
 
D

Diez B. Roggisch

Jens said:
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://myurl/

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
 
J

Jens

Jens schrieb:













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

Like I said i'm a newbie. I though the deal with Zope was that i
couldn't really do inline scripting (for security reasons)
like in php but had to use these external methods. how does one go
about creating a "normal" python script exactly and
how do I invoke it's functionality?
 
B

Bruno Desthuilliers

Jens a écrit :
IIRC, that's what the 'self' argument is for. Now I don't know if it
will solve the OP's problem with dtml (which I avoid like pest).
Like I said i'm a newbie. I though the deal with Zope was that i
couldn't really do inline scripting (for security reasons)
like in php but had to use these external methods. how does one go
about creating a "normal" python script exactly and
how do I invoke it's functionality?

Zope (well... Zope2.x) has an object type named "Script (Python)". What
you can do with them is restricted (for security reasons) but is
obviously enough for what you want here. And really, you should *not*
use dtml unless you have no other choice at all.

Anyway: Zope is a world in itself, and most pythoneers don't use it. The
Zope experts are mostly on the Zope's mailing list, so that's where you
should post such questions.

HTH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top