[Zope] build a query string out of a dictionary
(REQUEST.form)
Grégoire Weber
gregoire.weber@switzerland.org
Thu, 12 Jul 2001 18:18:08 +0200
Hi Andy,
Hallo Dieter,
Thanks a lot for your prompt answers! It gave me
the good feeling about having support from competent
people!
As I supposed there did not exist a clean solution
(I don't like extrenal python methods -- Sorry Andy!)
for that problem. It's even not in builtin in Zope :-(
So I programmed my first hotfix product which adds the
method 'query_string' to the HTTPRequest class.
Have a look at:
http://www.zope.org/Members/gregweb/HTTPRequestHotfix
What do you think? Should I file this to the tracker?
Greg
------------------------------------------------------------------------
HTTPRequestHotix Product
This so called 'Hotfix' adds the new method 'query_string' to the
HTTPRequest class. The method is then accessible through the
'REQUEST' object.
It builds a url quoted (quote_plus) query string from a dictionary
(usually from the form dictionary which is based on QUERY_STRING).
Usage
query_string([[replace]=replace_dict], [[original]=original_dict]])
Updates 'original_dict' by the values in 'replace_dict' and
returns the result as url quoted query string.
'original_dict' defaults to 'REQUEST.form' if no parameter
is passed to it. Keys in 'replace_dict' with a value of
'None' (or _.None in DTML) will be deleted from 'original_dicts'
before being quoted.
The original 'REQUEST.form' will remain unchanged.
Examples
(assuming 'REQUEST.form' is {'foobar':'no translation', 'foo':'bar'})
1. query_string(replace={'foobar':'furchtbar in german'})
returns 'foobar=furchtbar+in+german&foo=bar'
2. query_string(replace={'gaga':'&%+'}, original={'bar', 'foo'})
returns 'gaga=26%25%2b&bar=foo'
3. query_string(replace={'bar':'foo', 'foo', _.None})
returns 'foobar=no+translation&bar=foo'
4. The same in DTML:
<dtml-var "REQUEST.query_string(replace={'bar':'foo', 'foo', _.None})">
returns 'foobar=no+translation&bar=foo'
Have fun!
Grégoire Weber, 2001-07-12
At 08:10 11.07.01 -0700, Andy McKay wrote:
> A simple python method that loops through the form
> doesnt need urllib.
>
> eg:
>
> for k, v in context.REQUEST.form.items():
> if k == 'foo':
> # do something
> else:
> somestr = '%s&%s=%s' % (somestr, k, v)
At 20:46 11.07.01 +0200, Dieter Maurer wrote:
> Andy McKay writes:
> > for k, v in context.REQUEST.form.items():
> > if k == 'foo':
> > # do something
> > else:
> > somestr = '%s&%s=%s' % (somestr, k, v)
> Do not forget quoting:
>
> Query string fragments must be "urllib.quote_plus"ed.
_____________________________________
Grégoire Weber
mailto:gregoire.weber@switzerland.org