Leonel,

very interesting this possibility, it is possible to avoid rewriting enough 
thing, thanks for sharing!

Em terça-feira, 9 de julho de 2019 18:56:35 UTC-3, Leonel Câmara escreveu:
>
> This looks good, if you want to take it a step further and have something 
> like sub-controller-functions in your apps that will have their own views 
> folder inside the app views folder you can use this decorator I made:
>
> def parent_controller(views_folder=None, pop_args_zero=True):
>     """
>     Decorator to turn a controller function into a parent of other 
> controller
>     functions.
>
>     This allows you to have many controller functions in a single 
> controller
>     function each having their own view inside a folder.
>
>     :views_folder: Folder where it gets the views for the children 
> controllers
>                    by default uses the parent controller name.
>     :pop_args_zero: whether to remove or not the name of the children 
> controller
>                     from request.args. By default True.
>     """
>     if views_folder is None:
>         views_folder = os.path.join(request.controller, request.function)
>     def wrapper(action):
>         def f(_action=action, *a, **b):
>             command = None
>             try:
>                 if pop_args_zero:
>                     parseme = request.args.pop(0)
>                 else:
>                     parseme = request.args(0)
>                 if '.' in parseme:
>                     try:
>                         command, extension = parseme.split('.')
>                     except ValueError:
>                         raise HTTP(400, "invalid arguments")
>                 else:
>                      command, extension = parseme, 'html'
>             except (IndexError, TypeError): # pop from empty list
>                 command, extension = 'index', 'html'
>             
>
>             response.view = os.path.join(views_folder, command + '.' + 
> extension)
>
>             requested_controller = _action().get(command, None)
>             if requested_controller:
>                 return requested_controller()
>             else:
>                 raise HTTP(404)
>         f.__doc__ = action.__doc__
>         f.__name__ = action.__name__
>         return f
>     return wrapper
>
>
> Then in the app1.py controller you could do something like:
>
> @auth.requires_login()
> @parent_controller()
> def pages():
>     def index():
>         ...
>         return {}
>
>     def insert():
>         ...
>         return something
>
>     def delete():
>         ...
>         return something
>
>     return locals()
>
> And in the views you would have
>
> app1/
>     pages/
>         index.html
>         insert.html
>         delete.html
>
>
> @villas note that in your case it's probably better to have a single 
> application do the log in and then use CAS.
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/849111d4-5600-49f5-815c-2f03130e0832%40googlegroups.com.

Reply via email to