Ir para o conteúdo. Ir para a navegação
Ações do site
Opções do usuário
FISL 10

TcheZope.org

Você está aqui: Entrada Documentação Manuais O Livro do Zope Apêndice C: Referência de Modelos de Página do Zope
Acções do Documento

17. Apêndice C: Referência de Modelos de Página do Zope

Subir um nível
Zope Page Templates é uma ferramenta de geração HTML/XML. Este apêndice é uma referência dos padrões Zope Page Templates: Tag Attribute Language (TAL), TAL Expression Sintaxe (TALES) e Macro Expansion TAL (METAL).

Visão geral da TAL

O padrão Template Attribute Language (TAL) é uma linguagem de atributos usada para criar modelos (templates) dinâmicos. Ele permite substituir, repetir ou omitir elementos de um documento.

As instruções (instruçãos) TAL são atributos XML do espaço de nomes (namespace) TAL.Estes atributos podem ser aplicados a um documento XML ou HTML de forma a fazê-lo agir como um modelo.

Uma TAL instrução (instrução TAL) tem um nome (o atributo nome)
e um corpo (o valor do atributo). Por exemplo, uma instrução content
será como tal:content="string:Hello". O elemento onde uma instrução é
definida é um instrução element. A maioria das instruções TAL
requere expressões, mas a sintaxe e semântica dessas expressões não são parte
da TAL. TALES é recomendada para este propósito.

Namespace da TAL

O URI e alias recomendado para O espaço de nomes TAL são atualmente definidos como:

xmlns:tal="http://xml.zope.org/namespaces/tal"

Isso não é uma URL mas meramente um identificador único. Não espere que um
browser resolva este endereço com sucesso.

Zope não requer uma instrução de espaço de nomes XML quando cria modelos
com um conteúdo do tipo text/html. Entretanto, requer uma instrução de espaço
de nomes XML para todos os outros tipos de conteúdo.

Expressões da TAL

Estas são as instruções tal:

- tal:attributes - muda atributos do elemento dinamicamente.

- tal:define - define variáveis.

- tal:condition - testa condições.

- tal:content - altera o conteúdo de um elemento.

- tal:omit-tag - remove um elemento, sdeixando seu conteúdo.

- tal:on-error - manipula erros.

- tal:repeat - repete um elemento.

- tal:replace - altera o conteúdo de um elemento e o remove, deixando seu conteúdo.

Expressões usadas em instruções podem retornar valores de qualquer tipo,
embora a maioria das instruções aceitarão apenas strings, ou converterão
valores para uma representação de string. A linguagem de expressão deve definir
um valor denominado nothing que não é uma string. Em particular, este valor é útil
para deletar elementos ou atributos.

Ordem das operações

Quando há apenas uma instrução TAL por elemento, a ordem na
qual eles são executados é simples. Começando pelo elemento raiz,
cada instrução de elemento é executada, então cada um dos seus filhos
é visitado, em ordem, para fazer o mesmo.

Qualquer combinação de instruções podem aparecer nos mesmos elementos,
excetuando-se content e replace que não podem aparecer juntos.


Quando um elemento tem múltiplas instruções, elas são executadas na ordem seguinte:


1. 'define'

2. 'condition'

3. 'repeat'

4. content or 'replace'

5. 'attributes'

6. 'omit-tag'

Desde que a instrução on-error é invocada apenas quando um erro ocorre,
ela não aparece na lista.

O raciocínio por trás desta ordem é o seguinte: você frequentemente quer
utilizar variáveis em outras instruções, então define vem antes.
A próxima coisa a fazer é decidir se esse elemnto será mesmo incluido, então
condition vem a seguir; desde que a condição pode depender de variáveis
recém declaradas, ela vem após define. É de valor poder substituir várias partes
de um elemento com diferentes valores em cada iteração de uma repetição, então
repeat é o próximo. Não faz sentido substituir atributos e descartá-los, então
attributes vem por último. As instruções restantes conflitam, porque
substituem ou editam um elemento da instrução.

Veja também

Visão Geral de TALES

Visão Geral de METAL

tal:attributes

tal:define

tal:condition

tal:content

tal:omit-tag

tal:on-error

tal:repeat

tal:replace

attributes: Trocando os atributos de um elemento

Sintaxe

tal:attributes sintax::

argument ::= attribute_instrução [; attribute_instrução]*
attribute_instrução ::= attribute_name expression
attribute_name ::= [namespace ':'] Name
namespace ::= Name

*Nota: A inclusão de ponto e vírgula (;) em um elemento 'expression'
deve ser dobrada (;;).*

Descrição

A instrução tal:attributes substitui o valor de um atributo
(ou cria um atributo) com um valor dinâmico. Você pode qualificar o
nome de um atributo com um prefixo de espaço de nomes, por exemplo, html:table, se
você está gerando um documento XML com múltiplos espaços de nomes. O valor para cada
expressão é convertido para uma string se necessário.

Se uma expressão associada a uma atribuição a um atributo retorna
nothing, então o atributo é deletado do elemento da instrução.
Se a expressão retorna default, então este atributo não é modificado.
Cada atribuição é independente, então atributos podem receber valores
em uma mesma instrução na qual alguns atributos são deletados e outros não.

Se você usa tal:attributes em um elemento com um comando tal:replace, a
instrução tal:attributes é ignorada.

Se você usa tal:attributes em um elemento com uma instrução tal:repeat,
a substituição é feita em cada repetição do elemento e a expressão de substituição é
calculada novamente para cada repetição.

Exemplos

Substituindo um link::

<a href="/sample/link.html"
tal:attributes="href here/sub/absolute_url">

Substituindo dois atributos::

<textarea rows="80" cols="20"
tal:attributes="rows request/rows;cols request/cols">

condition: Condicionando a inserção ou remoção de um elemento

Sintaxe

tal:condition sintax::

argument ::= expression

Descrição

A instrução tal:condition inclui o elemento no modelo somente se a condição
é satisfeita e omite caso contrário. Se a expressão retorna verdadeiro, então o
processamento normal do elemento continua, caso contrário o elemento é imediatamente
removido do modelo. Por isso, nothing é falso e default é verdadeiro.

Nota: Zope considera variáveis ausentes, None*, zero, strings vazias e sequências
vazias como falso; todos os outros valores equivalem a verdadeiro.*

Exemplos

Testar uma variável antes de inserí-la (o primeiro exemplo testa pela existência
e verdade, enquanto que o segundo testa apenas pela existência)::

<p tal:condition="request/message | nothing"
tal:content="request/message">message goes here</p>

<p tal:condition="exists:request/message"
tal:content="request/message">message goes here</p>

Testar para condições alternativas::

<div tal:repeat="item python:range(10)">
<p tal:condition="repeat/item/even">Even</p>
<p tal:condition="repeat/item/odd">Odd</p>
</div>

content: Trocando o conteúdo de um elemento

Sintaxe

tal:content sintax::

argument ::= (['text'] | structure) expression

Descrição

Ao invés de substituir um elemento por inteiro, você pode inserir texto ou estrutura
no lugar de seus filhos atrvés de tal:content. O argumento da expressão é exatamente
igual ao de tal:replace e é interpretado da mesma forma. Se a expressão retorna nothing,
a instrução é deixada sem filhos. Se a expressão retorna default, então o conteúdo do
elemento não é modificado.

*Nota: O comportamento de substituição default é text.*

Exemplos

Inserindo o nome do usuário::

<p tal:content="user/getUserName">Fred Farkas</p>

Inserindo HTML/XML::

<p tal:content="structure here/getStory">marked <b>up</b>
content goes here.</p>

Veja também

'tal:replace'

define: Definindo variáreis

Sintaxe

tal:define sintax::

argument ::= define_scope [; define_scope]*
define_scope ::= (['local'] | global) define_var
define_var ::= variable_name expression
variable_name ::= Name

*Nota: A inclusão de ponto e vírgula (;) em um elemento 'expression'
deve ser dobrada (;;).*

Descrição

A instrução tal:define define variáveis. Você pode definir dois
diferentes tipos de variáveis TAL: local e global. Quando você define uma local
em um elemento de instrução, você so pode utilizar esta variável neste elemento e nos
elemntos por ele contidos. Se você redefine uma variável local em um elemento contido,
a nova definição esconde a anterior dentro do elemento contido. Quando você define
variáveis globais, você pode utilizá-la em qualquer elemento que segue a definição.
Se você redefine uma global, sua definição é substituída para o restante do modelo.

Nota: variáveis locais são o default

Se uma expressão associada a uma variável retorna nothing, então esta variável tem o
valor nothing, e pode ser usada como tal em expressões seguintes. Da mesma forma,
se a expressão retorna default, então esta variável tem o
valor default, e pode ser usada como tal em expressões seguintes.

Exemplos

Definindo uma variável global::

tal:define="global company_name string:Zope Corp, Inc."

Definindo duas variáveis, onde a segunda depende da primeira::

tal:define="mytitle template/title; tlen python:len(mytitle)"

omit-tag: Removendo um elemento, deixando seu conteúdo

Sintaxe

tal:omit-tag sintax::

argument ::= [ expression ]

Descrição

A instrução tal:omit-tag deixa o conteúdo de uma tag no lugar enquanto omite as
tags de início e fim.

Se a expressão retorna falso, então o processamento normal do elemento prossegue
e a tag não é omitida. Se retornar verdadeiro ou se não houver expressão, a instrução
da tag é substituída por seu conteúdo.

Nota: Zope considera variáveis ausentes, None*, zero, strings vazias e sequências
vazias como falso; todos os outros valores equivalem a verdadeiro.*

Exemplos

Omitindo uma tag incondicionalmente::

<div tal:omit-tag="" comment="This tag will be removed">
<i>...but this text will remain.</i>
</div>

Omitindo uma tag condicionalmente::

<b tal:omit-tag="not:bold">I may be bold.</b>

O exemplo acima omitirá a tag b se avariável bold é falsa.


Criando tags de dez parágrafos, sem tag de fechamento::

<span tal:repeat="n python:range(10)"
tal:omit-tag="">
<p tal:content="n">1</p>
</span>

on-error: Manipulando erros

Sintaxe

tal:on-error sintax::

argument ::= (['text'] | structure) expression

Descrição

A instrução tal:on-error provê manipulação de erros para o modelo.
Qual uma expressão TAL produz um erro, seu interpretador busca por uma
instrução tal:on-error no mesmo elemento, no elemento que o contém e assim
por diante. A primeira tal:on-error encontradaé invocada e tratada como
uma instrução tal:content.


Uma variável local error é criada. Esta variável tem os seguintes atributos:

type -- tipo da exceção

value -- a instãncia da exceção

traceback -- o objeto de traceback

O tipo mais simples de instrução tal:on-error possui uma string literal
de erro ou nothing para uma expressão. Um manipulador mais complexo pode
chamar um script que examina o erro e emite uma mensagem de erro ou propaga
a exceção a frente.

Exemplos

Mensagem de erro simples::

<b tal:on-error="string: Usuário não definido!"
tal:content="here/getUsername">Ishmael</b>

Remivendo elementos com erros::

<b tal:on-error="nothing"
tal:content="here/getUsername">Ishmael</b>

Chamando um script de manipulação de erro::

<div tal:on-error="structure here/errorScript">
...
</div>

Abaixo como este script ficaria::

## Script (Python) "errHandler"
##bind namespace=_
##
error=_['error']
if error.type==ZeroDivisionError:
return "<p>Não posso dividir por zero.</p>"
else
return """<p>Um erro ocorreu.</p>
<p>Tipo do erro: %s</p>
<p>Valor: %s</p>""" % (error.type, error.value)

Veja também

"Python Tutorial: Errors and
Exceptions":http://www.python.org/doc/current/tut/node10.html

"Python Built-in
Exceptions":http://www.python.org/doc/current/lib/module-exceptions.html

repeat: Repetindo um elemento

Sintaxe

tal:repeat sintax::

argument ::= variable_name expression
variable_name ::= Name

Descrição

A instrução tal:repeat replica uma sub-árvore de seu documento
uma vez para cada item em uma sequência. A expressão deve retornar
uma sequência. Se a sequência for vazia, então o elemento é deletado,
caso contrário é repetido para cada valor na sequência. Se a expressão
for default, então o elemento não é modificado e nenhuma nova
variável é definida.

A expressão variable_name é usada para definir uma variável local
e uma de repetição. Para cada repetição, a variável local recebe o
elemento atual e a de repetição recebe um objeto de iteração.

Variáveis de repetição

Você utiliza variáveis de repetição para acessar informação sobre
a repetição atual (como o índice de repetição). A variável de
repetição tem o mesmo nome que a variável local, mas só é acessível
através da variável embutida denominada repeat.

As informações a seguir são disponibilizadas da variável de repetição:

o index - número de repetição, começando de zero.

o number - número de repetição, começando de um.

o even - verdadeiro para repetições indexadas por pares (0, 2, 4, ...).

o odd - verdadeiro para repetições indexadas por ímpares (1, 3, 5, ...).

o start - verdadeiro para a repetição inicial (index 0).

o end - verdadeiro para repetição final.

o first - verdadeiro para o primeiro elemento em um grupo - veja nota abaixo

o last - verdadeiro para o último elemento em um grupo - veja nota abaixo

o length - tamanho da sequência, que será o número total de repetições.

o letter - número de repetição como uma letra minúscula: "a" -
"z", "aa" - "az", "ba" - "bz", ..., "za" - "zz", "aaa" - "aaz",
e assim por diante.

o Letter - versão upper-case de letter.

o roman - número de repetição como numeral romano minúsculo:
"i", "ii", "iii", "iv", "v", etc.

o Roman - versão upper-case de roman.

Você pode acessar o conteúdo da variável de repetição usando
expressões de caminho (path expressions) ou expressões Python.
Em expressões de caminho, você escreve um caminho de três partes
consistindo de do nome repeat, o nome da variável da instrução
e o nome da informação que você deseja, por exemplo, repeat/item/start.
Em expressões Python, você usa a noatação normal de dicionário para
obter a variável de repetição, então o atributo para obter a informação,
por exemplo, "python:repeat['item'].start".

Note que first e last são usados em sequências ordenadas.
Eles tentam dividir a sequência em um grupode itens com o mesmo
valor. Se você provê um caminho, então o valor obtido seguindo este
caminho de um item de sequência é usado para agrupamento, caso contrário
o valor do item é utilizado. Você pode prover um caminho passando-o
como parâmetro, como em "python:repeat['item'].first(color)", ou
apendando-o ao caminho da variável de repetição como em "repeat/item/first/color".

Exemplos

Iterando sobre uma sequência de strings::

<p tal:repeat="txt python:one, two, three">
<span tal:replace="txt" />
</p>

Inserindo uma seuência de linhas de tabela e usando a variável de repetição para
numerar as linhas::

<table>
<tr tal:repeat="item here/cart">
<td tal:content="repeat/item/number">1</td>
<td tal:content="item/Descrição">Dispositivo</td>
<td tal:content="item/preço">R$1.50</td>
</tr>
</table>


Repeats aninhados::

<table border="1">
<tr tal:repeat="row python:range(10)">
<td tal:repeat="column python:range(10)">
<span tal:define="x repeat/row/number;
y repeat/column/number;
z python:x*y"
tal:replace="string:$x $y = $z">1 1 = 1</span>
</td>
</tr>
</table>

Inserir objetos. Separar grupos de objetos por meta-tipo através de uma regra entre eles::


<div tal:repeat="object objects">
<h2 tal:condition="repeat/object/first/meta_type"
tal:content="object/meta_type">Meta Tipo</h2>
<p tal:content="object/getId">ID do Objeto</p>
<hr tal:condition="repeat/object/last/meta_type" />
</div>

Note que os objetos no exemplo acima devem já estar ordenados por meta-tipo.

replace: Trocando um elemento

Sintaxe

tal:replace sintax::

argument ::= (['text'] | structure) expression

Descrição

A instrução tal:replace substitui um elemento com conteúdo dinâmico.
Substitui o elemento com um texto ou uma estrutura (unescaped markup).
O corpo da instrução é uma expressão com um prefixo de tipo opcional.
O valor da expressão é convertido para uma "escaped string" se você prefixar
a expressão com text ou omitir o prefixo e é inserido sem modificações
se você prefixar com structure. "Escaping" consiste de converter
"&amp;" para "&amp;amp;", "&lt;" para "&amp;lt;" e "&gt;" para "&amp;gt;".

Se o valor é nothing, então o elemento é simplesmente removido. Se o valor é default,
então o elemento não é modificado.

Exemplos

As duas formas de inserir o título de um modelo::

<span tal:replace="template/title">Título</span>
<span tal:replace="text template/title">Título</span>

Inserindo HTML/XML::

<div tal:replace="structure table" />

Inserindo nada::

<div tal:replace="nothing">Este elemento é um comentário.</div>

Veja também

'tal:content'

por Diego Pereira do Nascimento última modificação 2007-03-07 06:57 Creative Commons
Navegação
Enquete
Como você efetiva sua participação comunitária?








Mais »