реклама
Бургер менюБургер меню

Кеннет Рейтц – Автостопом по Python (страница 50)

18

····[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 %}

····&copy; 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>