Кеннет Рейтц – Автостопом по Python (страница 50)
····[3,"The Matrix"]
]
# Метод template.render() возвращает строку, содержащую отрисованный HTML
html_output = template.render(list=movie_list, title="My favorite movies")
# Обработчик для основной страницы
class MainHandler(tornado.web.RequestHandler):
····def get(self):
····# Возвращает отрисованную строку шаблона запросу браузера
········self.write(html_output)
# Присваиваем обработчик на сервер (127.0.0.1:PORT/)
application = tornado.web.Application([
····(r"/", MainHandler),
])
PORT=8884
if __name__ == "__main__":
····# Настраиваем сервер
····application.listen(PORT)
····tornado.ioloop.IOLoop.instance(). start()
Файл base.html может быть использован в качестве основы для всех страниц сайта. В этом примере они могли бы быть реализованы в блоке content (в данный момент пуст):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
····<link rel="stylesheet" />
····<title>{{title}} — My Web Page</title>
</head>
<body>
<div id="content">
····{# В следующей строке будет добавлено содержимое шаблона site.html #}
····{% block content %}{% endblock %}
</div>
<div id="footer">
····{% block footer %}
····© Copyright 2013 by <a >you</a>.
····{% endblock %}
</div>
</body>
В следующем примере кода показана страница сайта (site.html), которая расширяет шаблон base.html. Блок content будет встроен автоматически в соответствующий блок base.html:
<!{% extends "base.html" %}
{% block content %}
····<p class="important">
····<div id="content">
········<h2>{{title}}</h2>
········<p>{{ list_title }}</p>
········<ul>
············{% for item in list %}
············<li>{{ item[0]}}: {{ item[1]}}</li>
············{% endfor %}
········</ul>
····</div>
····</p>
{% endblock %}
Chameleon
Chameleon Page Templates (файлы с расширением *.pt) (https://chameleon.readthedocs.org/) — это реализация в движке шаблонов синтаксисов Template Attribute Language (TAL) (http://en.wikipedia.org/wiki/Template_Attribute_Language), TAL Expression Syntax (TALES) (http://bit.ly/expression-tales) и Macro Expansion TAL (Metal) (http://bit.ly/macros-metal) для HTML/XML. Chameleon анализирует Page Templates и «компилирует» их в байт-код Python для повышения скорости загрузки.
Доступен в Python 2.5 и выше (включая 3.x и PyPy) и является одним из двух движков для отрисовки, используемых Pyramid по умолчанию (см. подробнее подраздел «Pyramid» ранее в этом разделе). (Вторым является Mako, описанный в следующем подразделе.)
Page Templates добавляет специальный элемент attributes и текстовую разметку для вашего XML-документа: набор простых языковых конструкций позволяет управлять потоком документов, повторением элементов, заменой текста и переводом. Благодаря синтаксису, основанному на атрибутах, неотрисованные шаблоны страниц представляют собой корректный HTML, могут быть просмотрены в браузере и даже отредактированы с помощью редакторов WYSIWYG (What you see is what you get — «Что видишь, то и получаешь»). Это позволяет упростить взаимодействие с дизайнерами, а также прототипирование с использованием статических файлов. Основы языка TAL легко освоить с помощью примера:
<html>
··<body>
··<h1>Hello, <span tal: replace="context.name">World</span>!</h1>
····<table>
······<tr tal: repeat="row 'apple', 'banana', 'pineapple'">
········<td tal: repeat="col 'juice', 'muffin', 'pie'">
············<span tal: replace="row.capitalize()" /> <span tal: replace="col" />
········</td>
······</tr>