_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
>
>
>
>
>  

Reply via email to