Or to avoid a redirect, you can change the function and controller in a model file:
db = DAL(...) if request.function == 'dispatch': request.controller, request.function = [fetch from db] response.view = '%s/%s.%s' % (request.controller, request.function,request .extension) response.generic_patterns = ['html'] # to enable the generic.html view if needed Anthony On Friday, May 11, 2012 6:07:56 AM UTC-4, simon wrote: > > 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? >> >