Para expandir a lógica e a funcionalidade dos seus modelos, o HubL aceita vários operadores-chave e testes de expressão. Os operadores permitem executar funções matemáticas, fazer comparações, complicar a lógica do modelo e alterar a renderização da marcação. Além disso, este artigo contém uma lista abrangente de testes de expressão que podem ser usados no HubL.
Última modificação: 8 de outubro de 2025
Para expandir a lógica e a funcionalidade dos seus modelos, o HubL aceita vários operadores-chave e testes de expressão. Os operadores permitem executar funções matemáticas, fazer comparações, complicar a lógica do modelo e alterar a renderização da marcação. Além disso, este artigo contém uma lista abrangente de testes de expressão que podem ser usados no HubL.
Os operadores são símbolos que dizem ao compilador HubL para executar várias operações que resultam na saída final. Operadores são colocados entre operandos para relacionar os dois valores, seja para executar funções matemáticas, fazer comparações ou implementar expressões booleanas.
Abaixo estão os operadores que você pode usar no HubL, organizados por tipo.
Os operadores de comparação podem ser usados para avaliar os valores da lógica do modelo. Você pode ver alguns exemplos de operadores de comparação sendo usados nas instruções se.
Report incorrect code
Copy
Ask AI
{% set my_num = 11 %}{% set my_number = 2 %}{{ my_num == my_number }}<!-- Evaluates to false -->{{ my_num != my_number }}<!-- Evaluates to true -->{{ my_num > my_number }}<!-- Evaluates to true -->{{ my_num >= my_number }}<!-- Evaluates to true -->{{ my_num < my_number }}<!-- Evaluates to false -->{{ my_num <= my_number }}<!-- Evaluates to false -->
Símbolo
encurtado
Descrição
==
eq
Igual a. Avalia como verdadeiro se os dois objetos têm valores iguais.
!=
ne
Não é igual a. Avalia como verdadeiro se os dois objetos não forem iguais.
>
gt
Maior que. Avalia como verdadeiro se o valor do operando esquerdo for maior que o do operando direito.
>=
gte
Maior ou igual a. Avalia como verdadeiro se o operando esquerdo for maior ou igual ao operando direito.
<
It
Menor que. Avalia como verdadeiro se o operando esquerdo for menor que o operando direito.
<=
lte
Menor ou igual a. Avalia como verdadeiro se o operando esquerdo for menor ou igual ao operando direito.
A versão abreviada dos operadores de comparação pode ser usada em filtros HubL que envolvem testar uma expressão como |selectattr().
Operadores lógicos permitem implementar expressões booleanas, bem como combinar múltiplas expressões em instruções únicas.
Report incorrect code
Copy
Ask AI
Two non-empty strings:{{ "a" and "b" }}<!-- Evaluates to true -->Empty string and non-empty string:{{ "" and "b" }}<!-- Evaluates to false -->Two non-zero numbers:{{ 1 and 2 }}<!-- Evaluates to true -->Zero and non-zero number:{{ 0 and 1 }}<!-- Evaluates to false -->Two non-empty lists:{{ [1] and [2] }}<!-- Evaluates to true -->Empty list and non-empty list:{{ [] and [2] }}<!-- Evaluates to false -->Two non-empty dicts:{{ {a: 1} and {b: 2} }}<!-- Evaluates to true -->Empty dict and non-empty dict:{{ {} and {b: 2} }}<!-- Evaluates to false -->
Símbolo
Descrição
and
Retornos true se tanto o operando esquerdo quanto o direito forem verdadeiros. Caso contrário, retorna false.
Este operador não se comporta como o operador and em Python ou o operador && em JavaScript. Saiba mais sobre o uso de operadores and abaixo.
or
Retorna o primeiro operando se for verdadeiro. Caso contrário, retorna o segundo operando.
Este operador é equivalente a or em Python e || em JavaScript. Saiba mais sobre o uso de operadores or abaixo.
is
Une dois operandos para uma declaração afirmativa.
not
Nega uma afirmação, em conjunto com is.
(expr)
Agrupa uma expressão para a ordem de operações. Por exemplo, (10 - 2) * variable.
?
O operador ternário pode ser usado para escrever rapidamente lógica condicional. Aceita 3 argumentos: expressão, condição verdadeira, condição falsa. Avalia uma expressão e retorna a condição correspondente.
Usando operadores e/ouNo HubL, o operador or se comporta como o operador or em Python e o operador || em JavaScript. Ele retornará o primeiro operando se a expressão for avaliada como verdadeira, caso contrário, retornará o segundo operando. Um caso de uso comum para o operador or está definindo um valor de fallback quando um valor de variável não está definido.
Report incorrect code
Copy
Ask AI
Two non-empty strings:{{ "a" or "b" }}<!-- Evaluates to "a" -->Empty string and non-empty string:{{ "" or "b" }}<!-- Evaluates to "b" -->Defining a fallback value:{{ some_variable or "default value" }}<!-- If some_variable is defined, print its value,otherwise print "default value" -->
No entanto, o operador and se comporta de forma diferente do operador and em Python e o operador && em JavaScript. No HubL, and sempre retornará um valor booleano: quando a expressão for avaliada como verdadeira, true é retornado, caso contrário retornará false. Os operadores Python e JavaScript, por outro lado, retornarão um valor de operando com base na avaliação da instrução como verdadeira ou falsa.
Report incorrect code
Copy
Ask AI
Two non-empty strings:{{ "a" and "b" }}<!-- Evaluates to true -->Empty string and non-empty string:{{ "" and "b" }}<!-- Evaluates to false -->
No HubL, listas vazias ([]) e dicionários vazios ({}) são considerados falsos. Isso é equivalente ao comportamento em Python, mas diferente do JavaScript, onde [] e {} são verdadeiros.
Report incorrect code
Copy
Ask AI
Empty list and non-empty list:{{ [] or [2] }}<!-- Evaluates to [2] -->Empty dict and non-empty dict:{{ {} and {b: 2} }}<!-- Evaluates to false -->
Testa se uma variável de lista contém todos os valores de outra lista.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma variável está definida dentro do contexto do modelo. Embora você possa usar esse teste de expressão, escrever uma instrução if sem operador será o padrão para verificar se a variável está definida ou não.No exemplo abaixo, o parâmetro de cor de um módulo de cor é testado. Se o parâmetro de cor não contiver um valor, o modelo renderizará uma cor de fundo preta padrão. Se for definido, ele renderizará a cor de fundo definida pelo usuário.
Report incorrect code
Copy
Ask AI
{% 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>
Testa se um objeto é divisível por outro número.Por exemplo, abaixo, é criado um loop for que itera através de uma lista de tipos de animais. Cada tipo de animal é impresso em uma div, e cada 5ª div tem um estilo em linha diferente aplicado (largura:100%). Esse conceito pode ser aplicado a um blog em que uma marcação diferente é renderizada para um determinado padrão de posts. Para saber mais sobre loops e loop.index, confira este artigo.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se o valor de uma variável é igual a uma constante ou a outra variável. Você também pode usar o operador == para fazer o mesmo teste.No exemplo abaixo, a largura dos posts do blog é ajustada com base no número total de postagens no loop. O exemplo de saída pressupõe que havia 4 posts no blog.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma variável numérica é um número par.O exemplo abaixo mostra um loop de listagem de blog simplificado, em que, se a iteração atual do loop for par, uma classe de even-post será atribuída ao div do item do post. Caso contrário, uma classe de odd-post é atribuída.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma variável pode ser percorrida em loop.Este exemplo verifica uma variável chamada jobs para ver se é possível iterar. Como a variável contém uma lista de empregos, o declaração if avaliaria para true, e o loop seria executado. Se a variável contivesse um único valor, a instrução if imprimiria esse valor com marcação diferente. Saiba mais sobre loops for.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma string é minúscula.O exemplo abaixo usa uma instrução unless e um filtro inferior para garantir que uma sequência de texto inserida em um módulo de texto esteja sempre em minúsculas.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se o valor de uma variável é um número.O exemplo abaixo verifica uma variável para ver se ela é ou não uma variável e, em caso afirmativo, converte-a em milhões.
Report incorrect code
Copy
Ask AI
{% set my_var = 40 %}{% if my_var is number %}{{ my_var * 1000000 }}{% else %}my_var is not a number.{% endif %}
Testa se duas variáveis têm ou não o mesmo valor.O exemplo abaixo define duas variáveis e, em seguida, verifica se elas são ou não as mesmas.
Report incorrect code
Copy
Ask AI
{% 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 %}
Semelhante ao teste iterável, esta expressão teste verifica se uma variável é uma sequência.O exemplo abaixo testa se uma variável é uma sequência e, em seguida, itera por essa sequência de gêneros musicais.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se o valor armazenado em uma variável é texto.O exemplo abaixo verifica se uma variável é uma string e, se for, aplica um filtro de título para alterar a capitalização.
Report incorrect code
Copy
Ask AI
{% set my_var = "title of section" %}{% if my_var is string %}{{ my_var|title }}{% else %}my_var is not a string{% endif %}
Testa se uma substring fornecida está contida em outra string. Este teste de expressão é usado em conjunto com o operador is.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma string começa com uma string específica. É usado em conjunto com o operador is.
Report incorrect code
Copy
Ask AI
{% 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 %}
Testa se uma variável é indefinida no contexto do modelo. Este teste é diferente do teste de expressão none em que indefinido será true quando a variável está presente, mas não tem valor; enquanto que nenhum será true quando a variável tem um valor nulo.O exemplo abaixo verifica um modelo para a existência da variável “my_var”.
Report incorrect code
Copy
Ask AI
{% if my_var is undefined %}A variable named "my_var" does not exist on this template.{% else %}{{ my_var }}{% endif %}
Testa se uma string está toda em letras maiúsculas. Abaixo está um exemplo inverso do teste de expressão loweracima.
Report incorrect code
Copy
Ask AI
{% 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 %}