Учебники

TurboGears — иерархия URL

Иногда веб-приложению может потребоваться структура URL, имеющая более одного уровня. TurboGears может просматривать иерархию объектов, чтобы найти подходящий метод, который может обработать ваш запрос.

Проект, «быстро запущенный» с коробкой передач, имеет класс BaseController в папке lib проекта. Он доступен как «Hello / hello / lib / base.py». Он служит базовым классом для всех субконтроллеров. Чтобы добавить подуровень URL в приложение, спроектируйте подкласс BlogController, производный от BaseController.

Этот BlogController имеет две функции контроллера, index () и post (). Оба предназначены для представления шаблона каждый, blog.html и post.html.

Примечание. Эти шаблоны помещаются во вложенную папку — 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}

Теперь объявите объект этого класса в классе RootController (в root.py) следующим образом:

class RootController(BaseController):
   blog = BlogController()

Другие функции контроллера для URL верхнего уровня будут присутствовать в этом классе, как и ранее.

Когда введен URL-адрес http: // localhost: 8080 / blog / , он будет сопоставлен с функцией контроллера index () внутри класса BlogController. Аналогично, http: // localhost: 8080 / blog / post вызовет функцию post ().

Код для blog.html и post.html приведен ниже.

Blog.html

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

post.html

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

Когда введен URL http: // localhost: 8080 / blog / , он выдаст следующий вывод:

Блог

Когда введен URL http: // localhost: 8080 / blog / post , он выдаст следующий результат: