Событие, хотя HTML-содержимое может быть возвращено в браузер, для более сложного вывода всегда предпочтительнее использовать механизм шаблонов. В полномасштабном проекте, «быстро запущенном» с помощью коробки передач, Genshi включен как средство визуализации шаблонов по умолчанию. Однако в минимальном приложении необходимо установить и включить Genshi (или любой другой шаблонизатор, например, jinja). Механизм шаблонов Genshi позволяет писать шаблоны в чистом формате xhtml и проверяет их, чтобы обнаружить проблемы во время компиляции и предотвратить обслуживание неработающих страниц.
На шаблоны ссылаются с помощью точечной нотации. В нашем проекте Hello имеется каталог шаблонов для хранения веб-страниц шаблонов. Следовательно, sample.html будет называться hello.templates.sample (расширение не указано). TurboGears визуализирует этот шаблон через декоратор экспозиции, чтобы связать с ним метод контроллера с помощью функции tg.render_template () .
Открытая функция контроллера возвращает объект словаря Python. Этот объект словаря в свою очередь передается связанному шаблону. Заполнители в шаблоне заполняются значениями словаря.
Для начала давайте отобразим веб-страницу с простым HTML-скриптом. Открытый контроллер возвращает пустой словарный объект, поскольку мы не собираемся отправлять какие-либо данные для анализа в HTML-сценарии.
Как создать образец HTML
Наш sample.html приведен ниже. Убедитесь, что он хранится в каталоге шаблонов проекта.
<html> <head> <title>TurboGears Templating Example</title> </head> <body> <h2>Hello, Welcome to TurboGears!.</h2> </body> </html>
Добавьте функцию sample () в root.py и выставьте через нее sample.html.
@expose("hello.templates.sample") def sample(self): return {}
Следующий результат будет отображаться в браузере при вводе URL-адреса http: // localhost: 8080 / sample после запуска веб-сервера.
Как уже упоминалось выше, объект словаря отправляется в виде набора параметров в шаблон Genshi. Этот шаблон содержит «заполнители», которые динамически заполняются параметрами, полученными от контроллера.
Давайте изменим функцию sample () для отправки объекта словаря в шаблон примера.
@expose("hello.templates.sample") def sample(self,name): mydata = {'person':name} return mydata
Создайте sample.html в папке с шаблонами ( templates \ sample.html )
<html> <head> <title>TurboGears Templating Example</title> </head> <body> <h2>Hello, my name is ${person}!.</h2> </body> </html>
В приведенном выше HTML-коде $ {person} является заполнителем. Введите http: // localhost: 8080 / sample? Name = MVL в качестве URL-адреса в браузере. Этот URL-адрес сопоставлен с методом sample () в нашем корневом контроллере. Возвращает объект словаря. Это выбирается связанной страницей шаблона sample.html в каталоге шаблонов. Затем $ {person} заменяется MVL на веб-странице.
Также возможно получить доступ к данным формы HTML в функции контроллера. Форма HTML использует для отправки данных формы.