TurboGears - Hierarquia de URL

Às vezes, um aplicativo da web pode exigir uma estrutura de URL com mais de um nível. O TurboGears pode percorrer a hierarquia de objetos para encontrar o método apropriado que pode lidar com sua solicitação.

Um projeto de 'início rápido' com caixa de engrenagens tem uma classe BaseController na pasta lib do projeto. Ele está disponível como 'Hello / hello / lib / base.py'. Ele serve como classe base para todos os subcontroladores. Para adicionar um subnível de URL no aplicativo, projete uma subclasse chamada BlogController derivada de BaseController.

Este BlogController tem duas funções de controlador, index () e post (). Ambos são projetados para expor um modelo cada, blog.html e post.html.

Note - Esses modelos são colocados dentro de uma subpasta - modelos / 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}

Agora declare um objeto desta classe na classe RootController (em root.py) da seguinte maneira -

class RootController(BaseController):
   blog = BlogController()

Outras funções de controlador para URLs de nível superior estarão presentes nesta classe como anteriormente.

Quando um URL http://localhost:8080/blog/for inserido, ele será mapeado para a função do controlador index () dentro da classe BlogController. Similarmente,http://localhost:8080/blog/post irá invocar a função post ().

O código para blog.html e post.html é o seguinte -

Blog.html

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

post.html

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

Quando um URL http://localhost:8080/blog/ for inserido, ele produzirá a seguinte saída -

Quando um URL http://localhost:8080/blog/post for inserido, ele produzirá a seguinte saída -