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 для приведенного выше кода с механизмом цикла выглядит следующим образом -