TurboGears - Jerarquía de URL

A veces, una aplicación web puede requerir una estructura de URL que tenga más de un nivel. TurboGears puede atravesar la jerarquía de objetos para encontrar el método apropiado que pueda manejar su solicitud.

Un proyecto de 'inicio rápido' con caja de cambios tiene una clase BaseController en la carpeta lib del proyecto. Está disponible como 'Hello / hello / lib / base.py'. Sirve como clase base para todos los subcontroladores. Para agregar un subnivel de URL en la aplicación, diseñe una subclase llamada BlogController derivada de BaseController.

Este BlogController tiene dos funciones de controlador, index () y post (). Ambos están diseñados para exponer una plantilla cada uno, blog.html y post.html.

Note - Estas plantillas se colocan dentro de una subcarpeta - templates / blog

class BlogController(BaseController):

   @expose('hello.templates.blog.blog')
   def index(self):
      return {}
		
   @expose('hello.templates.blog.post')
   def post(self):
      from datetime import date
      now = date.today().strftime("%d-%m-%y")
      return {'date':now}

Ahora declare un objeto de esta clase en la clase RootController (en root.py) de la siguiente manera:

class RootController(BaseController):
   blog = BlogController()

Otras funciones del controlador para las URL de nivel superior estarán allí en esta clase como antes.

Cuando una URL http://localhost:8080/blog/se ingresa, se asignará a la función del controlador index () dentro de la clase BlogController. Similar,http://localhost:8080/blog/post invocará la función post ().

El código para blog.html y post.html es el siguiente:

Blog.html

<html>
   <body>
      <h2>My Blog</h2>
   </body>
</html>

post.html

<html>
   <body>
      <h2>My new post dated $date</h2>
   </body>
</html>

Cuando una URL http://localhost:8080/blog/ se ingresa, producirá la siguiente salida:

Cuando una URL http://localhost:8080/blog/post se ingresa, producirá la siguiente salida: