Última modificação: 28 de agosto de 2025
Você pode incluir lógica condicional nos seus módulos e modelos utilizando instruções if e unless do HubL. As instruções If geralmente contêm operadores compatíveis com HubL e podem ser utilizadas para executar testes de expressão.
Observe: se estiver utilizando tokens de personalização dentro de uma instrução condicional do seu módulo de e-mail, você terá que ativar o e-mail programável para o módulo.As informações transmitidas por meio das APIs v3 ou v4 de envio único não funcionarão nas instruções if, uma vez que os modelos são compilados antes de as informações serem preenchidas.

Sintaxe básica da instrução if

O HubL utiliza instruções if para ajudar a definir a lógica de um modelo. A sintaxe das instruções if do HubL é muito semelhante à lógica condicional em Python. As instruções if são envolvidas por delimitadores, começando com uma instrução if de abertura e terminando com uma instrução endif. O exemplo abaixo fornece a sintaxe básica de uma instrução if, em que a “condição” seria substituída pela regra booleana que você avaliaria como verdadeira ou falsa.
{% if condition %}
	If the condition is true print this to template.
{% endif %}
Agora que você já viu a sintaxe básica, vamos analisar alguns exemplos reais de instruções if básicas. Os exemplos abaixo mostram instruções if que verificam se um módulo HubL com o nome my_module e se uma variável com o nome my_module estão presentes em um modelo. Observe que, sem operadores, a instrução if avalia se o módulo está ou não definido no contexto do modelo.
{% module "my_module" path="@hubspot/rich_text", label="My rich text module", html="Default module text" export_to_template_context=true %}

{% if widget_data.my_module %}
	A module named "my_module" is defined in this template.
{% endif %}

{% set my_variable = "A string value for my variable" %}
{% if my_variable %}
	The variable named my_variable is defined in this template.
{% endif %}
Repare que, ao avaliar o módulo HubL, o nome do módulo é deixado entre aspas dentro da instrução if e, ao testar a variável, não são utilizadas aspas no nome da variável. Em ambos os exemplos acima, o módulo e a variável existem no modelo; portanto, as instruções são avaliadas para imprimir a marcação. Observe que estes exemplos estão apenas testando se o módulo e a variável estão definidos, e não se eles contêm um valor. Vejamos agora uma instrução if que avalia se um módulo tem um valor, em vez de avaliar se ele existe no modelo. Para fazer isso, é necessário utilizar o parâmetro export_to_template_context. No exemplo abaixo, se o módulo de rich text contivesse um valor no editor de conteúdo, a marcação seria impressa. Se o campo de texto do módulo de rich text fosse desativado, nenhuma marcação seria exibida. Se estiver trabalhando com módulos personalizados, existe uma sintaxe simplificada, widget.widget_name, descrita neste exemplo.
{% module "product_names" path="@hubspot/text", label="Enter the product names that you would like to render the coupon ad for", value="all of our products", export_to_template_context=True %}

{% if widget_data.product_names.value %}
<div class="coupon-ad">
<h3>For a limited time, get 50% off {{ widget_data.product_names.value}}! </h3>
</div>
{% endif %}

Usar elif e else

As instruções if podem ser sofisticadas com instruções condicionais adicionais ou com uma regra que é executada quando a condição ou condições são falsas. A instrução elif permite adicionar condições à sua lógica que serão avaliadas depois da condição anterior. A instrução else define uma regra que é executada quando todas as outras condições são falsas. Você pode ter um número ilimitado de instruções elif dentro de uma instrução if, mas apenas uma instrução else . Veja abaixo um exemplo de sintaxe básica da instrução if que usa o operador <= para verificar o valor de uma variável. Neste exemplo, o modelo imprimiria: “A variável chamada number é menor ou igual a 6.”
{% set number = 5 %}

{% if number <= 2 %}
	Variable named number is less than or equal to 2.
{% elif number <= 4 %}
	Variable named number is less than or equal to 4.
{% elif number <= 6 %}
	Variable named number is less than or equal to 6.
{% else %}
	Variable named number is greater than 6.
{% endif %}
Veja abaixo mais um exemplo que utiliza um módulo de escolha para mostrar diferentes cabeçalhos em uma página de carreiras, com base no departamento escolhido pelo usuário. O exemplo utiliza o operador ==, para verificar a existência de certos valores predefinidos no módulo de escolha.
{% choice "department" label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %}

{% if widget_data.department.value == "Marketing" %}

<h3>Want to join our amazing Marketing team?!</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% elif widget_data.department.value == "Sales" %}

<h3>Are you a Sales superstar?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% elif widget_data.department.value == "Dev" %}

<h3>Do you love to ship code?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% else %}

<h3>Want to work with our awesome customers?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% endif %}

Instruções Unless

As instruções unless são condicionais, assim como as instruções if, mas funcionam com a lógica inversa. Elas processam e compilam o código entre as tags de abertura e fechamento, a menos que a condição booleana única seja avaliada como verdadeira. As instruções unless começam com**unless** e terminam com endunless. As instruções unless dão suporte a else mas não a elif. Veja abaixo um exemplo que imprime um cabeçalho “Em construção”, a menos que o campo de rich text tenha um valor. Se o campo de rich text tiver conteúdo, esse conteúdo será mostrado.
{% module "my_page_content" path="@hubspot/rich_text", label="Enter your page content", html="" export_to_template_context=true %}

{{ widget_data.my_page_content.html }}

{% unless widget_data.my_page_content.html %}
<h1>This page is under construction.</h1>
<h3>Come back soon!</h3>
{% endunless %}

ifchanged

Além das instruções if e unless, o HubL dá suporte a instruções ifchanged . Estas instruções podem ser utilizadas para mostrar apenas a marcação quando uma variável tiver sido alterada desde uma invocação anterior desta tag.

Instruções if em linha

O HubL dá suporte a instruções if em linha. Estas podem ser utilizadas para escrever lógica condicional de forma concisa com operadores e testes de expressão.
{% set color = "Blue" if is_blue is truthy else "Red" %}     // color == "blue"

{{ "Blue" if is_blue is truthy else "Red" }}     // "Blue"

{% set dl = true %}
<a href="http://example.com/some.pdf" {{"download" if dl }} >Download PDF</a>

Operadores ternários

Também é possível utilizar operadores ternários para escrever rapidamente lógica condicional com operadores e testes de expressão.
// If the variable is_blue is true, output "blue", otherwise output"red"
{{ is_blue is truthy ? "blue" : "red" }}

// Set the variable is_red to false if is_blue is true, otherwise set to true
{% set is_red = is_blue is truthy ? false : true %}