Operadores y pruebas de expresiones

Last updated:
Para ampliar la lógica y la funcionalidad de tus plantillas, HubL admite varios operadores clave y pruebas de expresión. Los operadores te permiten ejecutar funciones matemáticas, hacer comparaciones, complicar la lógica de la plantilla y alterar la representación del marcado. Además, este artículo contiene una lista completa de pruebas de expresión que se pueden utilizar en HubL.

Operadores

Los operadores son símbolos que indican al compilador HubL que ejecute diversas operaciones que dan lugar a la salida final del marcador. La siguiente sección incluye una lista de todos los operadores de HubL compatibles.

Matemáticas

Los operadores matemáticos estándar pueden utilizarse para calcular valores en el contexto de una plantilla.

Symbol Descripción
+ Suma dos objetos juntos. Generalmente se utiliza para la suma de números. Si estás tratando de concatenar cadenas de listas, debes utilizar ~ en su lugar.
- Resta un número de otro.
/ Dividir números
% Devuelve el resto de la división de números
"" Divide dos números y devuelve el resultado entero truncado. Ejemplo: {{ 20 // 7 }} es 2
* Multiplicar números
** Eleva el operando izquierdo a la potencia del operando derecho
{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num + my_number }}<br/> <!-- 11 + 2 = 13 --> {{ my_num - my_number }}<br/> <!-- 11 - 2 = 9 --> {{ my_num / my_number }}<br/> <!-- 11 / 2 = 5.5 --> {{ my_num % my_number }}<br/> <!-- 11 % 2 = 1 --> {{ my_num // my_number }}<br/> <!-- 11 // 2 = 5 --> {{ my_num * my_number }}<br/> <!-- 11 * 2 = 22 --> {{ my_num ** my_number }}<br/> <!-- 11 ** 2 = 121 -->13 9 5.5 1 5 22 121

Comparación

Los operadores de comparación se pueden utilizar para evaluar valores para la lógica de la plantilla. Puedes ver algunos ejemplos de uso de operadores de comparación en sentencias if aquí

Symbol abreviatura Descripción
== eq Igual a Se evalúa como verdadero si tdos objetos son iguales
!= ne No es igual a Se evalúa como verdadero si dos objetos no son iguales.
> gt Mayor que Se evalúa como verdadero si el lado izquierdo es mayor que el lado derecho.
>= gte Mayor que o igual a. Se evalúa como verdadero si el lado izquierdo es mayor que o igual al lado derecho.
< lt Menor que Se evalúa como verdadero si el lado izquierdo es menor que el lado derecho.
<= lte Menor que o igual a Se evalúa como verdadero si el lado izquierdo es menor que o igual al lado derecho.

La versión abreviada de los operadores de comparación se puede utilizar en filtros que implican la comprobación de una expresión como |selectattr().

{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num == my_number }}<br/> <!-- false --> {{ my_num != my_number }}<br/> <!-- true --> {{ my_num > my_number }}<br/> <!-- true --> {{ my_num >= my_number }}<br/> <!-- true --> {{ my_num < my_number }}<br/> <!-- false --> {{ my_num <= my_number }}<br/> <!-- false -->false true true true false false

Lógica

Los operadores lógicos permiten combinar varias expresiones en una sola sentencia.

Symbol Descripción
and Devuelve verdadero si el operando izquierdo y el derecho son verdaderos.
or Devuelve verdadero si el operando izquierdo o el derecho es verdadero.
not Niega un enunciado y se utiliza junto con is. Consulta el ejemplo siguiente.
(expr) Agrupa una expresión para el orden de las operaciones. Por ejemplo, (10 - 2) * variable.
?: El operador ternario acepta 3 argumentos (expresión, condición verdadera, condición falsa). Evalúa una expresión y devuelve la condición correspondiente.

Otros operadores de HubL

A continuación se presentan otros operadores importantes de HubL que pueden utilizarse para realizar diversas tareas.

Symbol Descripción
in Comprueba si un valor está en una secuencia.
is Realiza una prueba de expresión.
| Aplica un filtro.
~ Concatena los valores.

Pruebas de expresión

Las pruebas de expresión son varias condiciones booleanas que pueden evaluarse utilizando operadores lógicos.

boolean

La prueba de expresión booleana comprueba si el objeto es booleano (en sentido estricto, no en su capacidad de evaluarse a una expresión verdadera).

{% set isActive = false %} {% if isActive is boolean %} isActive is a boolean {% endif %}isActive is a boolean

containing

La prueba de expresión containing comprueba si una variable de lista tiene un valor en ella.

{% set numbers = [1, 2, 3] %} {% if numbers is containing 2 %} Set contains 2! {% endif %}Set contains 2!

containingall

La prueba de expresión containingall comprueba si una variable de lista contiene todos los valores de otra lista.

{% set numbers = [1, 2, 3] %} {% if numbers is containingall [2, 3] %} Set contains 2 and 3! {% endif %} {% if numbers is containingall [2, 4] %} Set contains 2 and 4! {% endif %}Set contains 2 and 3!

defined

La prueba de expresión defined comprueba si una variable está definida en el contexto de la plantilla. Aunque puedes utilizar esta prueba de expresión, al escribir una sentencia if sin ningún operador se comprobará por opción predeterminada si la variable está definida o no.

En el siguiente ejemplo, se comprueba el parámetro de color de un módulo de color. Si el parámetro de color no tuviera ningún valor, la plantilla, por opción predeterminada, mostraría un color de fondo negro. Si se define, muestra el color de fondo establecido por el usuario.

{% color "my_color" color="#930101", export_to_template_context=True %} <style> {% if widget_data.my_color.color is defined %} body{ background: {{ widget_data.my_color.color }}; } {% else %} body{ background: #000; } {% endif %} </style><style> body{ background: #930101; } </style>

divisibleby

La prueba de expresión divisibleby puede utilizarse para comprobar si un objeto es divisible por otro número.

Por ejemplo, a continuación se crea un bucle for que itera a través de una lista de tipos de animales. Cada tipo de animal se imprime en un div, y cada 5 div tiene aplicado un estilo inline diferente (width:100%). Este concepto podría aplicarse a un blog en el que se renderiza un marcador diferente para un determinado patrón de entradas. Para saber más sobre los bucles for y loop.index, consulta este artículo

{% set animals = ["lions", "tigers", "bears", "dogs", "sharks"] %} {% for animal in animals %} {% if loop.index is divisibleby 5 %} <div style="width:100%">{{animal}}</div> {% else %} <div style="width:25%">{{animal}}</div> {% endif %} {% endfor %}<div style="width:25%">lions</div> <div style="width:25%">tigers</div> <div style="width:25%">bears</div> <div style="width:25%">dogs</div> <div style="width:100%">sharks</div>

equalto

La prueba de expresión equalto comprueba si el valor de una variable es igual a una constante o a otra variable. También puedes utilizar el operador == para realizar la misma prueba.

En el ejemplo siguiente, el ancho de los posts del blog se ajusta en función del número total de entradas en el bucle. La salida del ejemplo supone que hay 4 posts en el blog. 

{% for content in contents %} {% if loop.length is equalto 2 %} <div style="width:50%;">Post content</div> {% elif loop.length is equalto 3 %} <div style="width:33.333332%;">Post content</div> {% elif loop.length is equalto 4 %} <div style="width:25%;">Post content</div> {% else %} <div style="width:100%;>Post content</div> {% endif %} {% endfor %}<div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div>

even

La prueba de expresión even comprueba si una variable numérica es un número par. 

El ejemplo siguiente muestra un bucle simplificado de listado de blogs, en el que si la iteración actual del bucle es par, se asigna una clase de even-post al div del elemento de la entrada. En caso contrario, se asigna una clase de odd-post. 

{% for content in contents %} {% if loop.index is even %} <div class="post-item even-post">Post content</div> {% else %} <div class="post-item odd-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

float

La prueba de expresión float comprueba si una variable numérica es un número de punto flotante. 

{% set quantity = 1.20 %} {% if quantity is float %} quantity is a floating point number {% endif %}quantity is a floating-point number

integer

Comprueba si una variable es un entero.

{% set quantity = 120 %} {% if quantity is integer %} quantity is an integer {% endif %}quantity is an integer

Iterable

Comprueba si una variable es iterable y puede ser recorrida en bucle.

Este ejemplo comprueba una variable llamada "jobs" para ver si puede ser iterada. Como la variable contiene una lista de trabajos, la sentencia if se evaluaría como verdadera y el bucle se ejecutaría. Si la variable contuviera un solo valor, la sentencia if imprimiría ese valor con un marcador diferente. Más información sobre los bucles for aquí

{% set jobs = ["Accountant", "Developer", "Manager", "Marketing", "Support"] %} {% if jobs is iterable %} <h3>Available positions</h3> <ul> {% for job in jobs %} <li>{{ job }}</li> {% endfor %} </ul> {% else %} <h3>Available position</h3> <div class="single-position">{{ jobs }}</div> {% endif %}<h3>Available positions</h3> <ul> <li>Accountant</li> <li>Developer</li> <li>Manager</li> <li>Marketing</li> <li>Support</li> </ul>

lower

La prueba de expresión lower evalúa como verdadero cuando una cadena está en minúsculas. 

El siguiente ejemplo utiliza una sentencia unless y un filtro lower para asegurar que una cadena de texto introducida en un módulo de texto esté siempre en minúsculas.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Lowercase", export_to_template_context=True %} {% unless widget_data.my_text.value is lower %} {{ widget_data.my_text.value|lower }} {% endunless %}some text that should be lowercase

mapping

La prueba de expresión mapping comprueba si un objeto es o no un dict (diccionario). 

El ejemplo siguiente comprueba si el objeto de contacto es un diccionario, en cuyo caso lo es. 

{% if contact is mapping %} This object is a dictionary. {% else %} This object is not a dictionary. {% endif %}This object is a dictionary.

none

La prueba de expresión none comprueba si una variable tiene un valor nulo.

{% module "user_email" path="@hubspot/text" label="Enter user email", value="example@hubspot.com", export_to_template_context=True %} {% unless widget_data.user_email.value is none %} {{ widget_data.user_email.value }} {% endunless %}example@hubspot.com

number

La prueba de expresión number comprueba si el valor de una variable es o no un número.

El siguiente ejemplo comprueba si una variable es o no una variable, y si es así la convierte en millones.

{% set my_var = 40 %} {% if my_var is number %} {{ my_var * 1000000 }} {% else %} my_var is not a number. {% endif %}40000000

odd

La prueba de expresión odd comprueba si una variable numérica es un número impar.

A continuación se muestra el mismo ejemplo que la prueba de expresión par inversa descrita anteriormente.

{% for content in contents %} {% if loop.index is odd %} <div class="post-item odd-post">Post content</div> {% else %} <div class="post-item even-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

sameas

La prueba de expresión sameas comprueba si dos variables tienen o no el mismo valor. 

El siguiente ejemplo establece dos variables y luego comprueba si son iguales o no.

{% set var_one = True %} {% set var_two = True %} {% if var_one is sameas var_two %} The variables values are the same. {% else %} The variables values are different. {% endif %}The variables values are the same.

sequence

La prueba de expresión sequence es similar a la prueba iterable , ya que comprueba si una variable es o no una secuencia.  

El siguiente ejemplo comprueba si una variable es una secuencia y luego itera a través de esa secuencia de géneros musicales.

{% set genres = ["Pop", "Rock", "Disco", "Funk", "Folk", "Metal", "Jazz", "Country", "Hip-Hop", "Classical", "Soul", "Electronica" ] %} {% if genres is sequence %} <h3>Favorite genres</h3> <ul> {% for genre in genres %} <li>{{ genre }}</li> {% endfor %} </ul> {% else %} <h3>Favorite genre:</h3> <div class="single-genre">{{ genres }}</div> {% endif %}<ul> <li>Pop</li> <li>Rock</li> <li>Disco</li> <li>Funk</li> <li>Folk</li> <li>Metal</li> <li>Jazz</li> <li>Country</li> <li>Hip-Hop</li> <li>Classical</li> <li>Soul</li> <li>Electronica</li> </ul>

string

La prueba de expresión string comprueba si el valor almacenado en una variable es texto. 

El siguiente ejemplo comprueba si una variable es o no una cadena, y si es así, aplica un filtro de título para cambiar las mayúsculas. 

{% set my_var = "title of section" %} {% if my_var is string %} {{ my_var|title }} {% else %} my_var is not a string {% endif %}Title Of Section

string_containing

Esta prueba comprueba si una cadena está contenida dentro de otra cadena. Esta prueba de expresión se utiliza junto con el operador "is".
{% if content.domain is string_containing ".es" %} Markup that will only render on content hosted on .es domains {% elif content.domain is string_containing ".jp" %} Markup that will only render on content hosted on .jp domains {% else %} Markup that will render on all other domains {% endif %}Markup that will render on all other domains

string_startingwith

Esta prueba de expresión comprueba si una cadena comienza con una cadena determinada. Se utiliza junto con el operador "is".

{% if content.slug is string_startingwith "es/" %} Markup that will only render on content hosted in a /es/ subdirectory {% elif content.slug is string_startingwith "jp/" %} Markup that will only render on content hosted in a /jp/ subdirectory {% else %} Markup that will render on all subdirectories {% endif %}Markup that will render on all subdirectories

truthy

La prueba de expresión truthy comprueba si una expresión es verdadera.

El siguiente ejemplo utiliza un módulo de casilla de comprobación booleana para mostrar un mensaje de alerta.

{% boolean "check_box" label="Show alert", value=True, export_to_template_context=True %} {% if widget_data.check_box.value is truthy %} <div class="alert">Danger!</div> {% endif %}<div class='alert'>Danger!</div>

undefined

La prueba de expresión undefined comprueba si una variable está indefinida en el contexto de la plantilla. Esta prueba es diferente de la de none, ya que undefined será verdadera cuando la variable esté presente pero no tenga ningún valor; mientras que none será verdadera cuando la variable tenga un valor nulo.  

El siguiente ejemplo comprueba la existencia de la variable "my_var" en una plantilla.

{% if my_var is undefined %} A variable named "my_var" does not exist on this template. {% else %} {{ my_var }} {% endif %}A variable named "my_var" does not exist on this template.

upper

La prueba de expresión upper evalúa como verdadero cuando una cadena está en mayúsculas. A continuación se muestra un ejemplo inverso de la prueba de expresión inferior anterior.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Uppercase", export_to_template_context=True %} {% unless widget_data.my_text.value is upper %} {{ widget_data.my_text.value|upper }} {% endunless %}SOME TEXT THAT SHOULD BE UPPERCASE

within

La prueba de expresión within comprueba si una variable está dentro de una lista.
{% set numbers = [1, 2, 3] %} {% if 2 is within numbers %} 2 is in the list! {% endif %} {% if 4 is within numbers %} 4 is in the list! {% endif %}2 is in the list!

¿Te resultó útil este artículo?
Con este formulario puedes enviar tu opinión sobre nuestros documentos para desarrolladores. Si tienes comentarios sobre el producto de HubSpot, puedes enviarlos al Foro de ideas.