Иногда веб-приложению может потребоваться структура 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 , он выдаст следующий результат: