TurboGears - Hierarchia adresów URL

Czasami aplikacja internetowa może wymagać struktury adresu URL, która ma więcej niż jeden poziom. TurboGears może przeglądać hierarchię obiektów, aby znaleźć odpowiednią metodę, która może obsłużyć Twoje żądanie.

Projekt „Szybki start” ze skrzynią biegów ma klasę BaseController w folderze lib projektu. Jest dostępny jako „Hello / hello / lib / base.py”. Służy jako klasa bazowa dla wszystkich kontrolerów podrzędnych. Aby dodać podrzędny poziom adresu URL w aplikacji, zaprojektuj podklasę o nazwie BlogController pochodzącą z BaseController.

Ten BlogController ma dwie funkcje kontrolera, index () i post (). Oba mają na celu udostępnienie szablonu, każdy blog.html i post.html.

Note - Te szablony są umieszczane w podfolderze - 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}

Teraz zadeklaruj obiekt tej klasy w klasie RootController (w root.py) w następujący sposób -

class RootController(BaseController):
   blog = BlogController()

Inne funkcje kontrolera dla adresów URL najwyższego poziomu będą dostępne w tej klasie, jak wcześniej.

Kiedy URL http://localhost:8080/blog/zostanie wpisana, zostanie odwzorowana na funkcję kontrolera index () w klasie BlogController. Podobnie,http://localhost:8080/blog/post wywoła funkcję post ().

Kod dla blog.html i post.html jest następujący -

Blog.html

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

post.html

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

Kiedy URL http://localhost:8080/blog/ zostanie wpisane, wygeneruje następujący wynik -

Kiedy URL http://localhost:8080/blog/post zostanie wpisane, wygeneruje następujący wynik -