Фреймворк web2py использует модели , контроллеры и представления в своих приложениях. Он включает слегка измененный синтаксис Python в представлениях для более удобочитаемого кода без каких-либо ограничений, накладываемых на правильное использование Python.
Основное назначение представления web2py — встраивание кода python в документ HTML. Тем не менее, он сталкивается с некоторыми проблемами, которые заключаются в следующем —
- Экранирование встроенного кода Python в документе HTML.
- Следующие отступы на основе Python, которые могут повлиять на правила HTML.
Чтобы избежать проблем, web2py использует разделители {{..}} в разделе просмотра. Разделители помогают в экранировании встроенного кода Python. Это также помогает следовать правилам HTML отступа.
Код, включенный в разделители {{..}}, включает непреднамеренный код Python. Поскольку Python обычно использует отступы для разделения блоков кода, непреднамеренный код внутри разделителей должен поддерживаться надлежащим образом. Чтобы преодолеть эту проблему, web2py использует ключевое слово «pass» .
Блок кода, начинающийся со строки, заканчивается двоеточием и заканчивается строкой, начинающейся с pass.
Примечание. Pass — это ключевое слово Python, а не ключевое слово web2py.
Следующий код показывает реализацию ключевого слова pass —
{{ if num > 0: response.write('positive number') else: response.write('negative number') pass }}
HTML Helpers
web2py включает вспомогательный класс, который можно использовать для программной сборки HTML. Он соответствует тегам HTML, которые называются «помощниками HTML».
Например —
[(A('Home', _href = URL('default', 'home')), False, None, []), ...]
Здесь A — помощник, соответствующий тегу привязки <a> HTML. Он создает HTML-тег <a> привязки программно.
Помощники HTML состоят из двух типов, а именно позиционных и именованных аргументов.
-
Позиционные аргументы интерпретируются как объекты, содержащиеся между HTML-тегами open и close.
-
Именованные аргументы начинаются со знака подчеркивания и интерпретируются как тег HTML.
Позиционные аргументы интерпретируются как объекты, содержащиеся между HTML-тегами open и close.
Именованные аргументы начинаются со знака подчеркивания и интерпретируются как тег HTML.
Помощники также полезны при сериализации строк с помощью методов _str_ и xml. Например —
>>> print str(DIV(“hello world”))
Выход
<div> hello world </div>
Примечание. Помощники HTML предоставляют представление объектной модели документа (DOM) на стороне сервера.
XML Helpers
XML называется объектом, который инкапсулирует текст, который не должен быть экранирован. Текст может содержать или не содержать действительный XML.
Например, для приведенного ниже кода он может содержать JavaScript.
>>> print XML('<script>alert("unsafe!")</script>')
Выход
<script> alert(“unsafe!”)</script>
Встроенные помощники
Есть много встроенных помощников, используемых в web2py. Некоторые из встроенных помощников HTML перечислены ниже.
название | использование | пример |
---|---|---|
Этот помощник используется для создания ссылок. Это соответствует тегу привязки |
[ (A('Home', _href = URL('default', 'home')), False, None, []), ...] |
|
В | Этот помощник помогает сделать содержимое текста жирным. |
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0) |
ТЕЛО | Этот помощник делает тело страницы. Он также включает в себя оператор умножения для увеличения числа разрывов. |
BR() |
КОД | Он выполняет подсветку синтаксиса для кода Python, C, C ++ и web2py. Этот помощник также имеет возможность связывать документацию API. |
CODE('print "hello"', language = 'python').xml() |
FIELDSET | Он создает поле ввода вместе с его меткой. |
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test') |
ГОЛОВА | Это помогает пометить тег <head> HTML-страницы. |
HEAD(TITLE('<hello>')) |
IMG | Это помогает встраивать изображения для данной HTML-страницы. |
IMG(_src = 'http://example.com/image.png',_alt = 'test') |
Пользовательские Помощники
Эти помощники используются для настройки тегов в соответствии с требованиями. web2py использует следующие пользовательские помощники —
ТЕГ
web2py использует TAG в качестве универсального генератора тегов. Это помогает в создании настраиваемых тегов XML. Общий синтаксис выглядит следующим образом —
{{ = TAG.name('a', 'b', _c = 'd')}}
Он генерирует код XML в виде: <name c = «d»> ab </ name>
TAG — это объект, а TAG.name
или TAG['name']
— это функция, которая возвращает временный вспомогательный класс.
МЕНЮ
Этот помощник составляет список пунктов списка или значений пунктов меню, генерируя древовидную структуру, представляющую меню. Список пунктов меню находится в форме response.menu . Например —
print MENU([['One', False, 'link1'], ['Two', False, 'link2']])
Вывод будет отображаться следующим образом —
<ul class = "web2py-menu web2py-menu-vertical"> <li><a href = "link1">One</a></li> <li><a href = "link2">Two</a></li> </ul>
украшать
Это помогает в построении представлений составных объектов, включая списки и словари. Например,
{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}
Он возвращает объект XML, сериализуемый в XML, с представлением аргумента конструктора. В этом случае представление будет —
{"a": ["hello", XML("world")], "b": (1, 2)}
Результат будет представлен как —
<table> <tr> <td>a</td> <td>:</td> <td>hello<br />world</td> </tr> <tr> <td>b</td> <td>:</td> <td>1<br />2</td> </tr> </table>
DOM-рендеринг на стороне сервера
Рендеринг на стороне сервера позволяет пользователю предварительно визуализировать начальное состояние компонентов web2py. Все производные помощники предоставляют поисковый элемент и элементы для отображения DOM на стороне сервера.
Элемент возвращает первый дочерний элемент, соответствующий указанному условию. С другой стороны, элементы возвращают список всех подходящих дочерних элементов . Оба используют один и тот же синтаксис.
Это можно продемонстрировать на следующем примере:
a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc'))) d = a.elements('div#target') d[0][0] = 'changed' print a
Выход дается как —
<div><div><div id = "target" class = "abc">changed</div></div></div>
Макет страницы
Представления используются для отображения результатов конечным пользователям. Он может расширяться, а также включать другие виды. Это будет реализовывать древовидную структуру.
Пример — «index.html» распространяется на «layout.html», который может включать «menu.html», который, в свою очередь, включает «header.html» .
{{extend 'layout.html'}} <h1>Hello World</h1> {{include 'page.html'}}
пример
В предыдущих главах мы создавали модели и контроллеры для модуля компании. Теперь мы сосредоточимся на создании представления, которое помогает в рендеринге отображения данных.
По умолчанию представления в web2py включают layout.html и index.html , которые определяют общий раздел отображения данных.
{{extend 'layout.html'}} <h2>Companies</h2> <table> {{for company in companies:}} <tr> <td>{{ = A(company.name, _href = URL('contacts', args = company.id))}}</td> <td>{{ = A('edit', _href = URL('company_edit', args = company.id))}}</td> </tr> {{pass}} <tr> <td>{{ = A('add company', _href = URL('company_create'))}}</td> </tr> </table>
Выход будет следующим: