As I pass it as vars via LOAD:

        {{=LOAD('default',
        'send_suggestion',
        vars={ 'c':request.controller,
        'f':request.function,
        'args':request.args,
        'vars':request.vars},
        ajax_trap=True)}}

does it mean that request.vars  has not been serialized/deserialized
correctly ?


On Thu, May 17, 2012 at 2:14 AM, Massimo Di Pierro <
massimo.dipie...@gmail.com> wrote:

> _vars = request.vars['vars'] or {}
> subject = 'FEEDBACK: %s' % URL(c=_c,f=_f,args=_args,vars=**_vars) #####
> <---- vars doesn't like Storage
>
> _vars is a string. You are trying to pass a string where it expects a
> dict()
>
> On Wednesday, 16 May 2012 18:01:13 UTC-5, sebastian wrote:
>>
>> Hi All,
>>
>> I'd like to add a feedback form in layout.html so that the users can
>> click on it on whatever page they are and send a message to the site admin.
>> To be useful, the form must include the current page and vars so that the
>> admin can click on a link and go to exactly the same place where the user
>> wrote the feedback from.
>>
>> in layout I've added
>>
>>         {{=LOAD('default',
>>         'send_suggestion',
>>         vars={ 'c':request.controller,
>>         'f':request.function,
>>         'args':request.args,
>>         'vars':request.vars},
>>         ajax_trap=True)}}
>>
>> in default.py
>>
>> def send_suggestion():
>>     form = SQLFORM.factory(
>>                Field('message', 'text', requires=IS_NOT_EMPTY())
>>            )
>>
>>     if form.process().accepted:
>>         _c = request.vars['c']
>>         _f = request.vars['f']
>>         _args = request.vars['args'] or []
>>         _vars = request.vars['vars'] or {}
>>         subject = 'FEEDBACK: %s' % URL(c=_c,f=_f,args=_args) ####**#
>> <---- it works
>>         subject = 'FEEDBACK: %s' % URL(c=_c,f=_f,args=_args,vars=**_vars) 
>> #####
>> <---- vars doesn't like Storage
>>         response.flash = 'Thanks for your feedback'
>>         # will send email
>>
>>
>>     return form
>>
>>
>> The problem is that URL *vars* doesn't like storage...
>>
>>
>> Traceback (most recent call last):
>>
>>
>>
>>   File "/home/sebas/dev/web2py/**peerservices/gluon/restricted.**py", line 
>> 205, in restricted
>>
>>
>>
>>     exec ccode in environment
>>
>>
>>
>>   File 
>> "/home/sebas/dev/web2py/**peerservices/applications/**peerservices/controllers/**default.py"
>>  
>> <http://localhost:8000/admin/default/edit/peerservices/controllers/default.py>,
>>  line 370, in <module>
>>
>>
>>
>>   File "/home/sebas/dev/web2py/**peerservices/gluon/globals.py"**, line 173, 
>> in <lambda>
>>
>>
>>
>>     self._caller = lambda f: f()
>>
>>
>>
>>   File 
>> "/home/sebas/dev/web2py/**peerservices/applications/**peerservices/controllers/**default.py"
>>  
>> <http://localhost:8000/admin/default/edit/peerservices/controllers/default.py>,
>>  line 301, in send_suggestion
>>
>>
>>
>>     subject = 'FEEDBACK: %s' % URL(c=_c,f=_f,args=_args,vars=**_vars)
>>
>>
>>
>>   File "/home/sebas/dev/web2py/**peerservices/gluon/html.py", line 290, in 
>> URL
>>
>>
>>
>>     if vars.has_key('_signature'): vars.pop('_signature')
>>
>>
>> AttributeError: 'str' object has no attribute 'has_key'
>>
>>
>>
>> Any better way than converting the Storage into dict ?
>>
>> thanks
>> --
>> Sebastian E. Ovide
>>
>>
>>
>>
>>


-- 
Sebastian E. Ovide

Reply via email to