Usando multiplos templates web2py

Muito bem, hoje vamos falar sobre templates e múltiplas visões no web2py.

Essa dica irá valer para você que quer templates dinâmicos em seu app, onde você possa alterar facilmente quando quiser, passando um parâmetros no appconfig ou coisa do tipo.

A ideia é bem básica, você tem um repositório de templates dentro de views onde você colocará seus layouts dentro, por exemplo temp01, temp02...

Vamos aproveitar também para aprender mais um pouco sobre a template engine (TE) do web2py (W2P) chamada de yatl no novo py4web.

Vamos lá...

O TE do W2P nos permite fazer heranças de visões e inclusões através das palavras reservadas extend e include respectivamente. 

Mas se elas são palavras reservadas não são código python?
Exatamente, extend e include e também o block não são código python, por isso elas são executadas antes de qualquer código python na nossa view.

Ou seja, o código abaixo nunca irá funcionar.
{{if condicao:}}
{{extend 'temp01.html'}}
{{else:}}
{{extend 'temp02.html}}

E nem isso.
{{from gluon.contrib.appconfig import AppConfig
myconf = AppConfig()}}
{{extend myconf("app.template")}}

Mas o abaixo sim.
{{extend 'temp01.html' if condicao else 'temp02.html'}}

Isso porque expressões regulares dentro das palavras reservadas é possível, não me pergunte o porque.

Por isso, então, quando fazemos {{extend var_template}} e tentamos compilar nosso app ele gera um erro, pois var_template não é reconhecido na TE. Mas isso não impede de o código bruto (html) ser executado.

Então como podemos sanar esse problema?
Simples, podemos definir um response.template dentro de nosso arquivo db.py, assim:

response.template = 'templates/temp01/layout.html' # importa o layout do temp01

E dentro da nossa view usamos:
{{extend response.template}}

Como response é executado no environment do W2P então ele é executado no momento em que a template engine está compilado as páginas.

Continua....

Referências:


Comentários

Postagens mais visitadas deste blog

Configurar o web2py no Apache e Ubuntu LTS

Placeholders em Campos de SQLFORM