durusmail: quixote-users: Need Form Help
Need Form Help
2005-07-21
2005-07-21
2005-07-21
2005-07-21
2005-08-17
Need Form Help
Orr, Steve
2005-07-21
THANKS!!! This was very helpful. After a little work I was able to get something
working.

In the base quixote.form.Form class there's an annoying line in the
_render_finish() method...
    r += htmltext('
') This creates an HTML break. So I subclassed Form and overwrote the method. I shouldn't have to do that for mere formatting should I? I found no such "quixoteform" class in the css.py. Is this a bug? This brings up another question... Are there some quixote classes which are commonly subclassed to add custom functionality or formatting? Are there any classes which developers routinely subclass? And what's the impact of then having to code against your subclasses versus the base classes? Thanks again, Steve Orr -----Original Message----- From: Mario Ruggier [mailto:mario@ruggier.org] Sent: Thu 7/21/2005 11:21 AM To: Orr, Steve Cc: quixote-users@mems-exchange.org Subject: Re: [Quixote-users] Need Form Help On Jul 21, 2005, at 6:01 PM, Orr, Steve wrote: > I'm trying to port a CGI app to Quixote/mod_python and I'm struggling > with forms. By way of illustration here's an HTML snippet from the CGI > app: > > >
> > > > custname >
> > data data data > > > The above represents 1 of many rows from a table displaying the results > of a database query. There is a "
" for each row in the > table and the form name (int105) is unique for each row. Note that form has no "name" attribute: http://htmlhelp.com/reference/html40/forms/form.html But I guess you can use an "id" attribute instead. > So how do I do this in Quixote? Does Quixote allow for multiple > Quixote-type-forms on a page? Yes. On the client, there are no quixote type forms, they are generic HTML forms. You can have as many as you want, but you can of course only submit one at a time. > How can I submit multiple form values > using an HREF instead of a button? One way is what you are doing already, via href javascript. You can also assign any js function to whatever other event, such as onclick. > I've played around with _q_lookup but > have yet to come up with something that works. Besides, I don't want to > display "custid" or any other hidden inputs in the URL or query string. You are already displaying custid in the html source. However since you are using POST, the form data will not appear as the query string. Anyhow, here some untested code: from quixote import get_request from quixote.directory import Directory from quixote.form import Form, HiddenWidget from quixote.html import href, TemplateIO def define_my_form(request, custid, custname): f = Form(action=request.get_path(), id='int%s'%(custid) ) f.attrs['class'] = 'my_form' f.add(HiddenWidget, 'name', value=custname) f.add(HiddenWidget, 'custid', value= custid) f.add(HiddenWidget, 'epochtime', value=time.time()) return f def render_my_form(f): r = TemplateIO() r += f._render_start() r += f.get_widget('name').render() r += f.get_widget('custid').render() r += f.get_widget('epochtime').render() r += href("javascript:document.getElementById('int%s').submit();" %(f.get('custid')), custname) r += f._render_finish() return r class my_directory(Dicrectory): _q_exports = ['my_form_handler'] def my_form_handler(self): request = get_request() if request.form: name = request.get_field('name') custid = request.get_field('custid') epochtime = request.get_field('epochtime') ... do something with it ... r = TemplateIO() r += ... rendering ... for cust in custs: # wrtite table stuff cell_form = define_my_form(request, custid, custname) r += render_my_form(cell_form) # more table / data stuff r += ... rendering ... return r Hope that helps. mario > Please advise. PLEASE! > Steve Orr
reply