[Zope] passing object from dtml to python script

Luby Liao liao@acusd.edu
Mon, 21 May 2001 15:23:38 -0700 (PDT)


Andres, thank you for taking an interest in my question.  After
reading Zopebook, the chapter on 'Advanced Zope Scripting', I decided
that what I want does not auto-magically happen, yet.  The application
I have in mind is a shopping-cart-like program in which we continue to
go from one form to another form, keeping all that have been entered
plus the result of sql queries, typically using hidden fields.  I have
written a python script to flatten REQUEST.form.items() into hidden
INPUT html element to propagate the information to the next form.  I
also find pluggable brains for ZSQL methods helpful.  Thank you again
for your help.  cheers, Luby

 > Hi Luby,
 > 
 > I think you are misunderstanding the purpose of HTML forms (forgive my
 > presumption!). When you use dtml-call you will get no results back from
 > the call, thus you are seeing ACTION="". ACTION should be followed by a valid
 > URL to the handler that will process the form.
 > 
 > I have not probed into your script too deeply but it seems that you can use
 > the firstname, lastname variables to pass to the handler script and then
 > use emailSearch again in the handler. That way you avoid passing x,
 > which you really cannot pass using the HTTP protocol anyhow.
 > 
 > On Thu, May 17, 2001 at 09:29:23AM -0700, Luby Liao wrote:
 > > 
 > > I posted the following question on 5-14-2001.  I got a prompt response
 > > from Andres (Thank you, Andres).  I tried his suggestions (see below)
 > > with many variations without success.  With some variations, e.g.,
 > > 
 > >   ACTION="<dtml-call complete_or_not(x)>" (line 9)
 > > 
 > > there are no errors.  Yet view source shows 
 > > 
 > >   ACTION=""
 > > 
 > > and reading the log from var/Z2.log shows that the python script is
 > > never called when the form is submitted.
 > > 
 > > Thank you in advance for your thoughts.  cheers, Luby   
 > > 
 > > 1. My question
 > > 
 > >  Is it possible to pass objects in a dtml, such as a row of the result
 > >  set of a sql query, into a python script used as a form handler?
 > > 
 > >  As an example, on line 9, 'complete_or_not' is a python script with
 > >  one argument.  I would like to pass an object x (line 2) into the
 > >  script.  But the syntax of line 9 is incorrect.  I could effectively
 > >  pass x in using hidden fields.  But I hope I can avoid that.  Any help
 > >  is greatly appreciated.  cheers, Luby
 > > 
 > > 
 > >   1	 <dtml-if email>
 > >   2	  <dtml-let x=emailSearch>
 > >   3	    <dtml-if "_.len(x)==1">
 > >   4		<dtml-in x>
 > >   5		  If you are <dtml-var firstname> <dtml-var lastname>, please 
 > >   6	            proceed to complete the registration, by clicking the
 > >   7			'complete' button.  Otherwise, click the 'not me'
 > >   8			button.
 > >   9		   <FORM METHOD="POST" ACTION="complete_or_not(x)>" NAME="complete" onSubmit="return verifyInput()">
 > >  10		   <TABLE border="0" cellpadding="0"><TR><TD align="right">
 > >  11		   <INPUT TYPE="submit" NAME="complete" VALUE="Complete"></TD><TD align="right">
 > >  12		   <INPUT TYPE="submit" NAME="not_me" VALUE="Not Me"></TD></TR>
 > >  13		   </TABLE>
 > >  14		   </FORM>
 > >  15		 </dtml-in>
 > >  16	    </dtml-if>
 > >  17	   </dtml-let>
 > >  18	 </dtml-if>
 > > 
 > > 2. Andres's solution
 > > 
 > >  Yes its possible to pass objects to scripts you call in dtml.
 > > 
 > >  One way to fix your syntax error is to write:
 > > 
 > >  <form method="post" action="<dtml-var "complete_or_not(x)" url>" ... >
 > > 
 > >  But that will just create the url where your user will go once they click
 > >  their button.
 > > 
 > >  If you want to avoid passing hidden fields take a look at the 
 > >  CoreSessionTracking product.
 > > 
 > >  In general you can call a script with something like:
 > > 
 > >  <dtml-var "someScrip(mySpecialObject=x)">
 > > 
 > >  or
 > > 
 > >  <dtml-call "someScriptWhoseSideEffectsIDoNotWantToSee(mySpecialObject=x)">
 > > 
 > > --
 > > Luby Liao, Department of Math/CS, University of San Diego, San Diego, CA 92110
 > > (619)260-4021(O), (619)452-7644(H), (619)260-4293(fax)
 > > 
 > >    'Twas brillig, and the slithy toves    Did gyre and gimble in the wabe:
 > >    All mimsy were the borogroves    And the mome raths outgrabe   -- L.C.
 > > 
 > > 
 > > 
 > > 
 > > 
 > > 
 > > 
 > >                                                   
 > > 
 > > 
 > > 
 > > 
 > > _______________________________________________
 > > Zope maillist  -  Zope@zope.org
 > > 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 )
 > > 
 > 
 > -- 
 > ------------------------------------------------------
 > Andres Corrada-Emmanuel   Email: andres@corrada.com
 > Internet Programming      http://www.mamey.com
 > ------------------------------------------------------
 >