You can do: def dispatch(): controller,function = ... load these from the database ... redirect(URL(c=controller, f=function, vars=request.vars, args=request.args))
On Friday, 11 May 2012 10:17:19 UTC+1, Michael Toomim wrote: > > I need to be able to dispatch to a different controller based on a > database lookup. So a user will go to a url (say '/dispatch'), and we'll > look up in the database some information on that user, choose a new > controller and function, and call that controller and function with its > view. > > I've almost got this working below, but the models are not being loaded > into the new controller. Is there a way to fix that? > > In default.py: > def dispatch(): > controller,function = ... load these from the database ... > response.view = '%s/%s.html' % (controller, > function) > > if not os.path.exists(request.folder + '/views/' + response.view): > response.view = 'generic.html' > > from gluon.shell import exec_environment > controller = exec_environment('%s/controllers/%s.py' > % (request.folder, > controller), > request=request, > response=response, > session=session) > return controller[request.task_function]() > > Unfortunately, the controller being called has access to request, > response, and session, but none of the global variables defined in my > models. Is there a way to get exec_environment() to run a function in > another controller WITHOUT losing all the model definitions? > > Or is there a better way to do this? >