CherryPy - презентационный слой
Уровень представления гарантирует, что сообщение, проходящее через него, нацелено на предполагаемых получателей. CherryPy поддерживает работу уровня представления с помощью различных механизмов шаблонов.
Механизм шаблонов принимает входные данные страницы с помощью бизнес-логики и затем обрабатывает их до конечной страницы, предназначенной только для целевой аудитории.
Малыш - движок шаблонов
Kid - это простой механизм шаблонов, который включает имя шаблона, который должен быть обработан (что является обязательным), и ввод данных, которые будут переданы при визуализации шаблона.
При создании шаблона в первый раз Кид создает модуль Python, который может использоваться как кэшированная версия шаблона.
В kid.Template функция возвращает экземпляр класса шаблона, который можно использовать для рендеринга выходного содержимого.
Класс шаблона предоставляет следующий набор команд -
S.No | Команда и описание |
---|---|
1. | serialize Он возвращает выходной контент в виде строки. |
2. | generate Он возвращает выходной контент как итератор. |
3. | write Он выгружает выходной контент в файловый объект. |
Параметры, используемые этими командами, следующие:
S.No | Команда и описание |
---|---|
1. | encoding Он сообщает, как кодировать выходной контент |
2. | fragment Это логическое значение, которое сообщает прологу XML или Doctype |
3. | output Этот тип сериализации используется для рендеринга контента. |
пример
Давайте рассмотрим пример, чтобы понять, как kid работает -
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns:py = "http://purl.org/kid/ns#">
<head>
<title>${title}</title>
<link rel = "stylesheet" href = "style.css" />
</head>
<body>
<p>${message}</p>
</body>
</html>
The next step after saving the file is to process the template via the Kid engine.
import kid
params = {'title': 'Hello world!!', 'message': 'CherryPy.'}
t = kid.Template('helloworld.kid', **params)
print t.serialize(output='html')
Детские атрибуты
Следующие атрибуты Kid -
Язык шаблонов на основе XML
Это язык на основе XML. Шаблон Kid должен быть правильно сформированным XML-документом с соответствующими соглашениями об именах.
Kid реализует атрибуты в элементах XML для обновления базового механизма в отношении действия, которое необходимо выполнить для достижения элемента. Чтобы избежать перекрытия с другими существующими атрибутами в документе XML, Kid ввел собственное пространство имен.
<p py:if = "...">...</p>
Замена переменных
Kid предлагает схему замены переменных и простой подход - $ {имя-переменной}.
Переменные могут использоваться либо в атрибутах элементов, либо в качестве текстового содержимого элемента. Ребенок будет оценивать переменную каждый раз, когда происходит выполнение.
Если пользователю нужен вывод буквальной строки в виде $ {something}, его можно избежать с помощью подстановки переменных, удвоив знак доллара.
Условный оператор
Для переключения различных случаев в шаблоне используется следующий синтаксис:
<tag py:if = "expression">...</tag>
Здесь tag - это имя элемента, например DIV или SPAN.
Выражение является выражением Python. Если как логическое значение он оценивается как True, элемент будет включен в выходной контент, иначе он не будет частью выходного контента.
Циклический механизм
Для цикла элемента в Kid используется следующий синтаксис:
<tag py:for = "expression">...</tag>
Здесь tag - это имя элемента. Выражение является выражением Python, например, для значения в [...].
пример
Следующий код показывает, как работает механизм цикла -
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>${title}</title>
<link rel = "stylesheet" href = "style.css" />
</head>
<body>
<table>
<caption>A few songs</caption>
<tr>
<th>Artist</th>
<th>Album</th>
<th>Title</th>
</tr>
<tr py:for = "info in infos">
<td>${info['artist']}</td>
<td>${info['album']}</td>
<td>${info['song']}</td>
</tr>
</table>
</body>
</html>
import kid
params = discography.retrieve_songs()
t = kid.Template('songs.kid', **params)
print t.serialize(output='html')
В output для приведенного выше кода с механизмом цикла выглядит следующим образом -