I am trying to provide a default value for an input textbox using
request.vars but am seeing some unusual behaviour.
Here is my controller:
def search():
keyword = ''
if 'keyword' in request.vars:
keyword = request.vars.keyword
form=SQLFORM.factory(
Field('keyword',
default=keyword,
)
)
if form.accepts(request.vars, session):
response.flash = 'Submitted'
return dict(form=form)
The view is basic.
{{extend 'layout.html'}}
{{=form}}
I am calling it like this:
http://www.example.com/demo/default/search?keyword=web2py
When the page first displays, the input has the default as expected.
However on subsequent submits, the input value is changed to a list
with the keyword appended:
Submit Input value
0 web2py
1 ['web2py', 'web2py'].
2 ['web2py', "['web2py', 'web2py']"]
...
This has something to do with my using the name 'keyword' for both the
field and the default value provided in the URL. If I use a different
name for the field it works normally.
I see something similar if I replicate the default value in the URL.
For example, this URL
http://www.example.com/demo/default/search?keyword=web2py&keyword=web2py
sets the input default to ['web2py', 'web2py']
Is this a bug or expected behaviour?
Is there a better way to permit a flexible default value for a field?