On 14 Dec 2012, at 7:02 PM, Lewis <lewis_le...@hotmail.com> wrote: > In one action, I generate the following link for the user to edit an item: > > A('edit', > _href=URL('edit_joke', > vars=dict(id=joke.joke.id, > backto=self.request.controller + '/' + self.request.function, > page=self.page, > moderate=self.request.get_vars.moderate) > ), > _class='button') > > The edit_joke action is in the controller full.py. edit_joke includes: > response.view = 'default/joke_basic.html' > return dict(form = form, topline = 'Edit this joke') > > Clicking on the button will traverse to this url: > http://127.0.0.1:8000/pyjokes/full/edit_joke?backto=full%2Fmanage_jokes&id=12&moderate=None&page=0 > > (Note that even though I didn't include the controller in the URL helper > func, web2py knows the current controller. That is good. I doubt that I > need to refer to the controller in my backto arg either...) > > However, when I click on the button, web2py tries to reference the wrong view > and generates an invalid path: > invalid view (full/edit_joke.html) > > > Why is response.view being ignored? The "default" in the path to the view > refers to the path for html templates: views/default/joke_basic.html. It > works for other actions that use the same view. It is only when I follow the > anchor link in code in a module. But, I have a delete button in the same > page that also refers to an action in the same controller--it works. Also, > pages in my response.menu that also use this template all work. All the > actions include an explicit response.view = ... > > Why doesn't it work in this case? >
I advise working from the assumption that the "invalid view" message is in fact showing you the response.view that you passed it, and try to discover why it's not actually being set as you describe. I might try raising an exception at the point you set it just to verify that it's being executed at that point, or at least log a message there. --