RES: [ZPT] HTML data entry forms and ZPTs

Jose Henrique dos Reis jhreis at senado.gov.br
Mon May 9 15:21:27 EDT 2005


You don't need to pass explicitly person_id.  When the ZSQL method's
arguments and form fields have the same names, the arguments are
automatically collected from the REQUEST object.  Otherwise you have to
call the ZSQL method with explicit arguments.

Another thing that you have to consider is that
context.REQUEST.person_id (in your form action) contains the value of
this variable before you submit the form, and not after.

Zenrique.

>  -----Mensagem original-----
> De: 	zpt-bounces at zope.org [mailto:zpt-bounces at zope.org]  Em nome de
> Ken Winter
> Enviada em:	segunda-feira, 9 de maio de 2005 15:00
> Para:	zpt at zope.org
> Assunto:	[ZPT] HTML data entry forms and ZPTs
> 
> I'm trying to build a data-entry form using only ZPTs (no DTML, except
> in the ZSQL methods that put the data into the DB).  
> 
> My little test page is at
> http://dhat.vega.zettai.net/clients/ridhwan/dhr3/deltest.htm.  At the
> top are the persons currently in the site's MySQL database; the
> retrieval of them works fine.  What doesn't work is the attempt to
> delete a person by entering an Id into the field and pressing the
> "Delete this Person" button.  
> 
> The core ZPT code for this page is:
> 
> <h1> People (deletion test)</h1>
> <table tal:repeat="row here/dbobs/read_all_people" width="100%"
> border="0" cellspacing="0" cellpadding="0"><font face="Verdana, Arial,
> Helvetica, sans-serif">
> <tr> 
> <td width="44%" tal:content="string:${row/person_id} -
> ${row/first_name} ${row/middle_names} ${row/last_name}">Filler</td>
> <td width="56%">&nbsp;</td>
> </tr>
> </table>
> <p></p>
> <form
> action="python:here.dbobs.delete_person_py(context.REQUEST.person_id)"
> method="post" name="delete_form">
> <p>Id of Person To Delete: 
>    <input type="text" name="person_id:int" />
> </p>
> <p> 
>    <input name="do_delete" type="submit" id="do_delete" value="Delete
> this Person" />
> </p>
> </form>
> <p>The &quot;Ids&quot; are the numbers in front of each person's
> name.</p>
> <p><a href="deltest.htm">Refresh This Page</a></p>
> <p tal:replace="python:here.dbobs.test1('MyParamValue')">Junk</p>	
> 
> Here is the entire body of the Python script "delete_person_py(id)"
> that the ZPT <form> tag is trying to call and that in turn invokes the
> ZSQL "delete_person" method:
> 
>        container.delete_person(person_id=id)
> 
> and here's the ZSQL method "delete_person" that it calls:
> 
>        delete from person where person_id = <dtml-sqlvar person_id
> type=int>
> 
> I think I have the problem narrowed down to the call from the ZPT to
> the Python script, which somehow fails to pass the form variable
> "person_id" that is needed to select the person to delete.  For
> example, I know that I can do deletes successfully by invoking the
> Python script directly from the ZMI.  I have tried every variation on
> the data-passing that I can think of.  I've tried calling the ZSQL
> method directly from the ZPT.  The successful call to another script
> at the bottom of the page rules out a bunch of other problems.  I have
> scoured every Zope reference I can find - there are plenty of examples
> of doing forms with DTML (e.g.
> http://www.faqts.com/knowledge_base/view.phtml/aid/5518/fid/567), but
> none for doing forms with ZPTs.
> 
> There's just gotta be a "well, duh" simple solution to this, but it
> has escaped me.
> 
> - Thanks in advance for your help!
> - Ken Winter << Arquivo: ATT1988512.txt >>  << Arquivo: deltest.htm >>
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zpt/attachments/20050509/3de9e9e0/attachment.htm


More information about the ZPT mailing list