modifying a url's query string
Hi, I'm wondering if there is a good way to modify the query string of a get request to change a single variable. For example, let's say my dtml method is accessed like this: http://myzope/MyFolder/method?var1=foo&var2=bar now I want one of the links on the page to load the same page, only with a different value for var2. I could use something like <dtml-var absolute_url>?var1=&dtml-var1;&var2=newvalue but that seems cumbersome the longer the list of variables gets. My first thought is to find some way to get the query string and make a function that will convert it to and from a dictionary, allowing me to change specific keys for new urls like full_url_with_query({'var1':'newvalue'}) but it seems that the only source of variable info is the (quite large) REQUEST object. Is there any way to pull only the query string variables out of the request, or even better, a function that does what my imaginary "full_url_with_query" function wants to do? Thanks for any suggestions, Mark Roach
Roach, Mark R. wrote:
Is there any way to pull only the query string variables out of the request, or even better, a function that does what my imaginary "full_url_with_query" function wants to do?
You can use REQUEST.form as subset of the REQUEST for parameters via the QUERY_STRING. -mj
Hi Mark, Roach, Mark R. wrote:
Hi, I'm wondering if there is a good way to modify the query string of a get request to change a single variable. For example, let's say my dtml method is accessed like this:
http://myzope/MyFolder/method?var1=foo&var2=bar
now I want one of the links on the page to load the same page, only with a different value for var2.
I could use something like <dtml-var absolute_url>?var1=&dtml-var1;&var2=newvalue
but that seems cumbersome the longer the list of variables gets.
...
full_url_with_query({'var1':'newvalue'})
This is ZTUtils.make_query().
but it seems that the only source of variable info is the (quite large) REQUEST object. Is there any way to pull only the query string variables
yes, this is the subobject "form" of REQUEST.
out of the request, or even better, a function that does what my imaginary "full_url_with_query" function wants to do?
Ok, some examples, requiring you do it inside a python script "Script (Python)" as you would do anyway for logic: # simple copy: from ZTUtils import make_query form = container.REQUEST.form return apply(make_query,(),form) # copy with replacement: from ZTUtils import make_query form = container.REQUEST.form form.update({'value1':'somevalue', 'value2':'othervalue'}) return apply(make_query,(),form) # copy with defaults: from ZTUtils import make_query form = container.REQUEST.form defauls = {'value1':'somevalue', 'value2':'othervalue'} defaults.update(form) return apply(make_query,(),form) # the most simple variable only: from ZTUtils import make_query return make_query(value1=1234,value2='foobar',value3=[1,2,3]) # this also shows how different types are handled. HTH Tino
participants (3)
-
Maik Jablonski -
Roach, Mark R. -
Tino Wildenhain