Condicionales y Bucles en Plantillas Qweb
Qweb es un motor de plantillas basado en XML. Básicamente, un motor de plantillas es una herramienta que combina las plantillas con modelos de datos para crear documentos. En Odoo, utilizamos las plantillas Qweb para generar informes. Estas plantillas nos ofrecen múltiples herramientas para desarrollar informes efectivos, lo que nos permite manipular los datos de manera sencilla.
En Qweb, es bastante común usar la etiqueta <t> en lugar de otros elementos. Todos los directivos en Qweb se utilizan con el prefijo t-. Por ejemplo, en el caso de las condicionales, empleamos t-if.
En este artículo, vamos a hablar sobre las declaraciones condicionales y los bucles en las plantillas Qweb.
Condicionales
Como ya sabemos, para las declaraciones condicionales utilizamos la directiva if.
<div>
<t t-if="condition">
<p>Verdadero</p>
</t>
</div>
Si la condición es verdadera, el resultado renderizará el elemento de la siguiente manera:
<div>
<p>Verdadero</p>
</div>
Si la condición es falsa, el elemento se eliminará del resultado, es decir:
<div>
</div>
Además, también podemos utilizar t-if directamente con el elemento <p>:
<p t-if="condition">Verdadero</p>
Para las directivas de bifurcación condicional, utilizamos t-elif y t-else. Por ejemplo:
<div>
<p t-if="status === 'enviado'">Enviado</p>
<p t-elif="status === 'cancelado'">Cancelado</p>
<p t-elif="status === 'pendiente'">Esperando Despacho</p>
<p t-else="">Error</p>
</div>
Bucles
Los bucles son útiles para repetir un bloque de código hasta que se cumpla una condición específica. También en Qweb, necesitamos bucles para iterar sobre un conjunto de valores. En Qweb, trabajamos con listas y diccionarios. Para iterar cada valor de la lista o diccionario, utilizamos t-foreach. También podemos usar un segundo parámetro t-as, que proporciona el elemento actual durante la iteración.
Por ejemplo:
<t t-foreach="[a, b, c]" t-as="i">
<p><t t-esc="i"/></p>
</t>
El resultado se renderizará como:
<p>a</p>
<p>b</p>
<p>c</p>
Aquí estamos iterando una lista. En el caso de un diccionario, i será la clave actual.
Existen otras variables que podemos usar junto con t-foreach y t-as. Por ejemplo:
$as_all: Con esta variable, el objeto se volverá a iterar.$as_value: Es similar a$asen el caso de listas y enteros, pero en el caso de diccionarios, proporcionará el valor en lugar de la clave.$as_size: Si está disponible, tomará el tamaño de las listas o diccionarios que estamos iterando.$as_first: Si el elemento actual es el primero en la iteración, equivale a$as_index == 0.$as_last: Si el elemento es el último de la iteración, equivale a$as_index + 1 == $as_size. Requiere el tamaño de la iteración.$as_parity: Indica la paridad de la iteración actual; es decir, si es par o impar.$as_even: Un flag booleano que verifica si el índice actual de la iteración es par.$as_odd: Otro flag booleano que verifica si el índice es impar.
Ejemplo de $as_value, $as_index:
<t t-foreach="[3, 2, 1]" t-as="item">
[<t t-esc="item_index"/>:
<t t-esc="item"/>
<t t-esc="item_value"/>]
</t>
La salida será:
[0: 3 3]
[1: 2 2]
[2: 1 1]
Ejemplo de $as_first, $as_last, $as_parity:
<t t-foreach="5" t-as="item">
-<t t-if="item_first"> primero</t>
<t t-if="item_last"> último</t> (
<t t-esc="item_parity"/>)
</t>
La salida será:
- primero (par)
- (impar)
- (par)
- (impar)
- último (par)
Ejemplo de $as_even, $as_odd:
<t t-foreach="people_data" t-as="people">
<tr t-att-style="people_odd and 'background-color:#eeeeee' or None">
<td style="padding: 5px">
<t t-esc="people['full_name'] or ''"/>
</td>
</tr>
<tr t-att-style="people_even and 'background-color:#ffffff' or None">
<td style="padding: 5px">
<t t-esc="people['email'] or ''"/>
</td>
</tr>
</t>
Ejemplo de $as_size:
<div t-foreach="invoice.l10n_ch_isr_optical_line" t-as="char"
t-esc="char"
t-attf-style="right: {{ round((char_size - char_index - 1) * 0.1, 1) }}in"
/>
El alcance de estas variables se mantiene dentro del foreach. Si por alguna razón estas variables existen fuera del bucle, sus valores se copiarán al final del bucle en un contexto global.
Servicios Relacionados
Si necesitas implementar estas funcionalidades en tu empresa, te puedo ayudar con la consultoría e implementación de Odoo. Además, ofrezco desarrollo de módulos personalizados, migración de datos y capacitación para usuarios.
Contáctame para una consulta gratuita o agenda una demo personalizada y comencemos a optimizar tus procesos con Odoo.
Condicionales y Bucles en Plantillas Qweb