[Zope] Did I miss some major change in Z SQL Methods ?
Curtis Maloney
curtis@cardgate.net
Mon, 29 Jan 2001 13:30:14 +1100
On Monday 29 January 2001 10:19, Fred Yankowski wrote:
> I missed the original message, but I'm trying to do something similar
> -- use Python Methods rather than DTML -- and I found one critical
> difference just today. Here's an example:
>
> I've got an SQL Method called 'select_item' that takes 'item_id' as
> its only input parameter.
>
> I've got a DTML Method 'form_action' that has 'item_id' in its
> namespace by virtue of being posted from an HTTP form.
>
> When I would invoke the SQL method from DTML I could do just
> <dtml-call select_item>
> and the SQL method would get the item_id from the DTML method.
>
> But when using a new 'action_script' Python Method (PythonMethod
> 0.1.7) I have to pass that item_id explicitly from the DTML
> <dtml-call "action_script(item_id)">
> and action_script itself has to call the SQL method like so
> self.select_item(item_id=item_id)
>
> I don't know why the explicit parameter passing is needed in the
> latter case (DTML to Python Method to SQL Method) but not in the
> former (DTML to SQL Method). I'm sure I'm missing some trick.
>
> In fact, this aspect of Zope -- when values are passed explicitly and
> when not -- is a major confusion for me. (And anyone who responds
> about "Zen" deserves to have the size 12 boot applied.)
>
The way it appears to work is this:
DTML will pass it's namespace on implicitly.
Python will not.
The exact details of what are passed are somewhat of a mystery, true.
Rember, of course that <dtml-var "method_name()"> is a Python expression.
As I understand it, the equivalent of:
<dtml-var method_name>
as a Python expression is:
<dtml-var "method_name(_.None, _)">
When it comes to Python scripts, yes, you must pass all parameters
explicitly. IMHO, this is a good thing in many cases, as it forces you to
make sure you are passing the correct values. But I can see how implied
values could make life easier... oh well...
Have a better one,
Curtis Maloney
P.S. I'm now moving my application to Zope 2.3 in the vague hope that
PythonScripts will handle this problem better.