The default TurboGears skeleton project consists of one controller. I believe most projects would benefit from splitting it into sub-controllers. This lets you separate the logic into their own modules. There are many ways to do the split. I chose the same method used in the Fast Track project.
The code is now easier to work with.
Calling an action in for example the project sub-controller looks like this:
<form action="/project/save" method="post">
The main controller:
... from subcontrollers.project import ProjectController from subcontrollers.action import ActionController from subcontrollers.tag import TagController from subcontrollers.context import ContextController class Root(controllers.RootController): project = ProjectController() action = ActionController() context = ContextController() tag = TagController() ...