|
Graham Dumpleton
grahamd at dscpl.com.au
Fri May 27 23:33:44 EDT 2005
On 28/05/2005, at 10:22 AM, Jason Lanquist wrote:
> Hi there, I can handle form data when I know how many items are
> returned. I use a fixed number of parameters when someone signs up
> like:
>
> def form_submit1(req,uname,passwd,passwd2,email,city,st,zip,country):
> ...
> ...
> ...
>
> But when I have a varying number of form items (they are generated by
> data) I'm not sure how many there will be so how is that handled? I
> tried to use "FieldStorage" as the only parameter (thinking it would
> be a list of form items) besides req but that doesn't work:
>
> def buy_fromstore(req,FieldStorage):
> ...
> ...
> ...
>
> How do you handle form data when you don't know how many items will be
> returned?
Assuming here that you are using mod_python.publisher. If that is the
case, define
your method to accept a keyword parameter list argument. You can then
go through
the dictionary keys and look for form parameters:
def buy_fromstore(req,**params):
for name in params.keys():
req.log_error(str((name,params[name])))
You can still have named parameters at the same time:
def buy_fromstore(req,uname,passwd,**params):
...
You obviously need to interpret the names of the form parameters in the
dictionary.
For a different way of doing this, you might look at Vampire. When
using its equivalent
to mod_python.publisher, you can have form parameters labeled as:
item-1
item-2
item-3
and they willbe automatically passed as a single parameter called
"item" where the
value for each actual form parameter is then stored in a list. One
could also have:
entry.a
entry.b
entry.c
and the result will be a dictionary instead of a list. One can mix the
form naming
conventions to get combination of both.
See:
http://www.dscpl.com.au/projects/vampire/articles/vampire-003.html
for a description of how Vampire treats form parameters. Although the
documentation
mainly shows use of this mechanism for Vampire's basic content
handlers, also applies
to vampire:publisher drop in replacement for mod_python.publisher.
This form of automatic conversion of form parameters into structured
lists and
dictionaries is really useful for example when you have a large list of
selectable
items in a form. The selected set of items ends up being in one
parameter which you
just iterate over.
If you want to play with this without getting down Vampire, construct
some forms
following the conventions and post it to:
http://www.dscpl.com.au/projects/vampire/examples/templates/
form_values.html
Eg:
http://www.dscpl.com.au/projects/vampire/examples/templates/
form_values.html?a-1=a1&a-2=a2&b.c=bc&b.d=bd
Graham
|