Web2py - Visualizações
o framework web2py usa Models, Controllers e Viewsem suas aplicações. Inclui uma sintaxe Python ligeiramente modificada noViews para um código mais legível sem qualquer restrição imposta ao uso adequado do Python
O principal objetivo de um web2py Viewé incorporar o código Python em um documento HTML. No entanto, ele enfrenta alguns problemas, que são os seguintes -
- Escape de código python embutido em um documento HTML.
- Seguindo o recuo baseado em Python, o que pode afetar as regras HTML.
Para fugir dos problemas, web2py usa delimitadores {{..}} na seção de visualização. Os delimitadores ajudam a escapar do código Python incorporado. Também ajuda a seguir as regras de recuo HTML.
O código incluído em {{..}}delimitadores incluem código Python não intencional. Como o Python normalmente usa indentação para delimitar blocos de código, o código não intencional dentro dos delimitadores deve ser mantido de maneira adequada. Para superar esse problema, o web2py usa o“pass” palavra-chave.
O bloco de código que começa com uma linha termina com dois pontos e termina com uma linha que começa com pass.
Note - pass é uma palavra-chave Python, não é uma palavra-chave web2py.
O código a seguir mostra a implementação da palavra-chave pass -
{{
if num > 0:
response.write('positive number')
else:
response.write('negative number')
pass
}}
Helpers HTML
web2py inclui uma classe auxiliar que pode ser usada para construir HTML de forma programática. Corresponde às tags HTML, denominadas “ajudantes HTML”.
Por exemplo -
[(A('Home', _href = URL('default', 'home')), False, None, []), ...]
Aqui, A é o ajudante correspondente à âncora <a>tag de HTML. Ele constrói a âncora HTML<a> tag programaticamente.
Os auxiliares de HTML consistem em dois tipos, a saber positional e named argumentos.
Positional argumentos são interpretados como objetos contidos entre as tags HTML de abertura e fechamento.
Named argumentos que começam com um sublinhado são interpretados como tag HTML.
Os ajudantes também são úteis na serialização de strings, com o _str_e métodos xml. Por exemplo -
>>> print str(DIV(“hello world”))
Resultado
<div> hello world </div>
Note - Os auxiliares de HTML fornecem uma representação do lado do servidor do Document Object Model (DOM).
Ajudantes XML
XML é denominado como um objeto, que encapsula o texto que não deve ser escapado. O texto pode ou não conter XML válido.
Por exemplo, para o código mencionado abaixo, ele pode conter JavaScript.
>>> print XML('<script>alert("unsafe!")</script>')
Resultado
<script> alert(“unsafe!”)</script>
Assistentes integrados
Existem muitos helpers integrados usados no web2py. Alguns dos auxiliares HTML embutidos estão listados abaixo.
Nome | Uso | Exemplo |
---|---|---|
UMA | Este auxiliar é usado para construir links. Corresponde à tag âncora | |
B | Este auxiliar ajuda a tornar o conteúdo do texto em negrito. | |
CORPO | Este auxiliar cria o corpo de uma página. Também inclui um operador de multiplicação para aumentar o número de pausas. | |
CÓDIGO | Realiza destaque de sintaxe para código Python, C, C ++ e web2py. Esse auxiliar também pode vincular uma documentação de API. | |
FIELDSET | Ele cria um campo de entrada junto com seu rótulo. | |
CABEÇA | Isso ajuda a marcar a tag <head> de uma página HTML. | |
IMG | Isso ajuda na incorporação de imagens para a página HTML fornecida. | |
Assistentes personalizados
Esses auxiliares são usados para personalizar as tags de acordo com os requisitos. web2py usa os seguintes ajudantes personalizados -
TAG
web2py usa TAG como gerador universal de tags. Ajuda na geração de tags XML personalizadas. A sintaxe geral é a seguinte -
{{ = TAG.name('a', 'b', _c = 'd')}}
Ele gera o código XML como: <name c = "d"> ab </name>
TAG é um objeto e / TAG.name
ou TAG['name']
é uma função que retorna uma classe auxiliar temporária.
CARDÁPIO
Este auxiliar faz uma lista dos itens da lista ou os valores dos itens do menu, gerando uma estrutura em forma de árvore que representa o menu. A lista de itens do menu está na forma deresponse.menu. Por exemplo -
print MENU([['One', False, 'link1'], ['Two', False, 'link2']])
A saída será exibida da seguinte forma -
<ul class = "web2py-menu web2py-menu-vertical">
<li><a href = "link1">One</a></li>
<li><a href = "link2">Two</a></li>
</ul>
EMBELEZAR
Ajuda na construção de representações de objetos compostos, incluindo listas e dicionários. Por exemplo,
{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}
Ele retorna um objeto XML serializável para XML, com uma representação de seu argumento de construtor. Neste caso, a representação seria -
{"a": ["hello", XML("world")], "b": (1, 2)}
A saída será processada como -
<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>
Renderização DOM do lado do servidor
A renderização do lado do servidor permite que um usuário pré-renderize o estado inicial dos componentes web2py. Todos os auxiliares derivados fornecem elemento de pesquisa e elementos para renderizar o DOM no lado do servidor.
o elementretorna o primeiro elemento filho que corresponde a uma condição especificada. Por outro lado,elementsretorna uma lista de todos os filhos correspondentes. Ambos usam a mesma sintaxe.
Isso pode ser demonstrado com o seguinte exemplo -
a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))
d = a.elements('div#target')
d[0][0] = 'changed'
print a
A saída é dada como -
<div><div><div id = "target" class = "abc">changed</div></div></div>
Layout da página
As visualizações são usadas para exibir a saída para os usuários finais. Ele pode se estender e incluir outras visualizações. Isso implementará uma estrutura semelhante a uma árvore.
Exemplo - “index.html” se prolonga até “layout.html” que pode incluir “menu.html” que por sua vez inclui “header.html”.
{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}
Exemplo
Nos capítulos anteriores, criamos modelos e controladores para o módulo da empresa. Agora, vamos nos concentrar na criação de visualização, que ajuda a renderizar a exibição de dados.
Por padrão, as visualizações em web2py incluem layout.html e index.html, que define a seção geral de exibição de dados.
{{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>
O resultado será o seguinte -