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