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?