Dernière modification : 22 août 2025
Afin d’étendre la logique et la fonctionnalité de vos modèles, HubL prend en charge plusieurs opérateurs et tests d’expression clés. Les opérateurs vous permettent d’exécuter des fonctions mathématiques, d’effectuer des comparaisons, de compliquer la logique des modèles et de modifier la restitution du balisage. En outre, cet article contient une liste complète des tests d’expression qui peuvent être utilisés dans HubL.

Opérateurs

Les opérateurs sont des symboles qui indiquent au compilateur HubL d’exécuter diverses opérations qui aboutissent à la sortie finale. Les opérateurs sont placés entre opérandes afin de relier les deux valeurs, que ce soit pour exécuter des fonctions mathématiques, effectuer des comparaisons ou implémenter des expressions booléennes.
operators-and-operands-diagram
Vous trouverez ci-dessous les opérateurs que vous pouvez utiliser dans HubL, organisés par type.

Mathématiques

Les opérateurs mathématiques standard peuvent être utilisés pour calculer des valeurs dans le contexte d’un modèle.
{% set my_num = 11 %}
{% set my_number = 2 %}

{{ my_num + my_number }}
<!-- 11 + 2 = 13 -->

{{ my_num - my_number }}
<!-- 11 - 2 = 9 -->

{{ my_num / my_number }}
<!-- 11 / 2 = 5.5 -->

{{ my_num % my_number }}
<!-- 11 % 2 = 1 -->

{{ my_num // my_number }}
<!-- 11 // 2 = 5 -->

{{ my_num * my_number }}
<!-- 11 * 2 = 22 -->

{{ my_num ** my_number }}
<!-- 11 ** 2 = 121 -->
SymboleDescription
+Ajoute deux objets, généralement des valeurs numériques. Pour concaténer des chaînes ou des listes, vous devez utiliser l’opérateur~ à la place.
-Soustrait un nombre d’un autre.
/Divise des nombres.
%Renvoie le reste de la division de nombres.
//Divise deux nombres et renvoie le résultat entier tronqué. Par exemple, {{ 20 // 7 }} ou 2.
*Multiplie des nombres.
**Élève l’opérande gauche à la puissance de l’opérande droit

Comparaison

Les opérateurs de comparaison peuvent être utilisés pour évaluer les valeurs pour la logique de modèle. Vous pouvez consulter quelques exemples d’utilisation d’opérateurs de comparaison dans les fonctions if.
{% 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 -->
SymbolesténographieDescription
==eqÉgal à. Est défini sur true si les deux objets ont des valeurs égales.
!=neN’est pas égal à. Est défini sur true si les deux objets ne sont pas égaux.
>gtEst supérieur à. Est défini sur true si la valeur de l’opérande gauche est supérieure à l’opérande droit.
>=gteEst supérieur ou égal à. Est défini sur true si l’opérande gauche est supérieur ou égal à l’opérande droit.
<ltInférieur à. Est défini sur true si l’opérande gauche est inférieur à l’opérande droit.
<=lteEst inférieur ou égal à. Est défini sur true si l’opérande gauche est inférieur ou égal à l’opérande droit.
La version abrégée des opérateurs de comparaison est utilisable dans les filtres HubL qui impliquent de tester une expression comme |selectattr().

Logique

Les opérateurs logiques vous permettent d’implémenter des expressions booléennes ainsi que de combiner plusieurs expressions en instructions conditionnelles uniques.
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 -->
SymboleDescription
andRenvoie true si l’opérande gauche et l’opérande droit sont exacts. Dans le cas contraire, renvoie false.

Cet opérateur ne se comporte pas comme l’opérateur and en Python ou l’opérateur && en JavaScript. Découvrez-en davantage sur l’utilisation des opérateurs and ci-dessous.
orRenvoie le premier opérande s’il est exact. Sinon, renvoie le deuxième opérande.

Cet opérateur est équivalent à or en Python et JavaScript|| Découvrez-en davantage sur l’utilisation des opérateurs or ci-dessous.
isAssocie deux opérandes pour un énoncé affirmatif.
notInvalide une instruction conditionnelle, en conjonction avec is.
(expr)Regroupe une expression conditionnelle pour l’ordre des opérations. Par exemple : (10 - 2) * variable.
?L’opérateur ternaire peut être utilisé pour écrire rapidement une logique conditionnelle. Il accepte 3 arguments (expression, condition true, condition false). Il évalue une expression et renvoie la condition correspondante.
Utilisation des opérateurs et/ou Dans HubL, l’opérateur or se comporte comme l’opérateur or en Python et l’opérateur || en JavaScript. Il renverra le premier opérande si l’expression conditionnelle est définie comme true, sinon il renverra le deuxième opérande. Un cas d’utilisation courant de l’opérateur or consiste à définir une valeur de secours lorsqu’une valeur de variable n’est pas définie.
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" -->
Cependant, l’opérateur and se comporte différemment de l’opérateur and en Python et de l’opérateur && en JavaScript. Dans HubL, and renvoie toujours une valeur booléenne : lorsque l’expression est évaluée comme true, true est renvoyée, sinon elle renvoie false. Les opérateurs Python et JavaScript, quant à eux, renverront une valeur d’opérande selon que l’instruction est définie sur true ou false.
Two non-empty strings:
{{ "a" and "b" }}
<!-- Evaluates to true -->

Empty string and non-empty string:
{{ "" and "b" }}
<!-- Evaluates to false -->
Dans HubL, les listes vides ([]) et les dictionnaires vides ({}) sont considérés comme faux. C’est équivalent au comportement de Python, mais différent de JavaScript, où [] et {} sont exacts.
Empty list and non-empty list:
{{ [] or [2] }}
<!-- Evaluates to [2] -->

Empty dict and non-empty dict:
{{ {} and {b: 2} }}
<!-- Evaluates to false -->

Autres opérateurs HubL

Vous trouverez ci-dessous d’autres opérateurs HubL importants qui peuvent être utilisés pour effectuer diverses tâches.
SymboleDescription
inVérifie si une valeur se trouve dans une séquence.
isEffectue un test d’expression.
|Applique un filtre.
~Concatène les valeurs.

Tests d’expression

Les tests d’expression sont diverses conditions booléennes qui peuvent être évaluées à l’aide d’opérateurs logiques.

boolean

Vérifie si l’objet est booléen (au sens strict, pas dans sa capacité d’évaluation pour une expression véridique).
{% set isActive = false %}

{% if isActive is boolean %}
isActive is a boolean
{% endif %}

containing

Vérifie si une variable de liste contient une valeur.
{% set numbers = [1, 2, 3] %}

{% if numbers is containing 2 %}
Set contains 2!
{% endif %}

containingall

Vérifie si une variable de liste contient toutes les valeurs d’une autre liste.
{% 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 %}

defined

Vérifie si une variable est définie dans le contexte du modèle. Bien que vous puissiez utiliser ce test d’expression, l’écriture d’une fonction if sans aucun opérateur aura pour effet de vérifier par défaut si la variable est définie ou non. Dans l’exemple ci-dessous, le paramètre color d’un module de couleur est testé. Si le paramètre color n’avait pas de valeur, le modèle afficherait une couleur de fond noire par défaut. S’il est défini, la couleur d’arrière-plan définie par l’utilisateur sera restituée.
{% 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>

divisibleby

Vérifie si un objet est divisible par un autre nombre. Par exemple, ci-dessous, une boucle for est créée pour parcourir une liste de types d’animaux. Chaque type d’animal est imprimé dans une division et un style en ligne différent est appliqué toutes les 5 divisions (largeur :100 %). Ce concept pourrait être appliqué à un blog où un balisage différent est restitué pour un certain modèle d’article. Pour en savoir plus sur les boucles for et loop.index, consultez cet article.
{% 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 %}

equalto

Vérifie si la valeur d’une variable est égale à une constante ou à une autre variable. Vous pouvez également utiliser l’opérateur == pour effectuer le même test. Dans l’exemple ci-dessous, la largeur des articles du blog est ajustée en fonction du nombre total d’articles dans la boucle. L’exemple de sortie suppose qu’il y a 4 articles dans le 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 %}

even

Vérifie si une variable numérique est un nombre pair. L’exemple ci-dessous montre une boucle simplifiée d’énumération de blog, où si l’itération actuelle de la boucle est paire, une classe even-post est attribuée à la division d’élément d’article. Autrement, une classe odd-post est attribuée.
{% 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 %}

float

Vérifie si une variable numérique est un nombre à virgule flottante.
{% set quantity = 1.20 %}
{% if quantity is float %}
quantity is a floating point number
{% endif %}

integer

Vérifie si une variable est un nombre entier.
{% set quantity = 120 %}
{% if quantity is integer %}
Quantity is an integer
{% endif %}

iterable

Vérifie si une variable peut être parcourue en boucle. Cet exemple vérifie une variable appelée jobs pour voir si elle peut être parcourue par itération. Comme la variable contient une liste de tâches, la fonction if est définie sur true et la boucle s’exécute. Si la variable avait contenu une seule valeur, la fonction if aurait imprimé cette valeur avec un balisage différent à la place. Découvrez-en davantage sur les boucles for.
{% 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 %}

lower

Vérifie si une chaîne est en minuscules. L’exemple ci-dessous utilise une fonction unless et un filtre pour vérifier qu’une chaîne de texte saisie dans un module de texte est toujours en minuscules.
{% 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 %}

mapping

Vérifie si un objet est un dictionnaire L’exemple ci-dessous vérifie si l’objet de contact est un dictionnaire.
{% if contact is mapping %}
This object is a dictionary.
{% else %}
This object is not a dictionary.
{% endif %}

none

Vérifie si une variable a une valeur null.
{% 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 %}

number

Vérifie si la valeur d’une variable est un nombre. L’exemple ci-dessous vérifie si une variable est ou non une variable et, si tel est le cas, la convertit en millions.
{% set my_var = 40 %}
{% if my_var is number %}
{{ my_var * 1000000 }}
{% else %}
my_var is not a number.
{% endif %}

odd

Vérifie si une variable numérique est un nombre impair. Vous trouverez ci-dessous le même exemple que le test d’expression inverse even décrit précédemment.
{% 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 %}

sameas

Vérifie si deux variables ont ou non la même valeur. L’exemple ci-dessous définit deux variables et vérifie ensuite si elles sont identiques ou non.
{% 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 %}

sequence

Semblable au test iterable, ce test d’expression vérifie si une variable est une séquence. L’exemple ci-dessous vérifie si une variable est une séquence, puis parcourt cette séquence de genres musicaux.
{% 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 %}

chaîne

Vérifie si la valeur stockée dans une variable est du texte. L’exemple ci-dessous vérifie si une variable est une chaîne de caractères et, si tel est le cas, applique un filtre de titre pour modifier la capitalisation.
{% set my_var = "title of section" %}
{% if my_var is string %}
{{ my_var|title }}
{% else %}
my_var is not a string
{% endif %}

string_containing

Vérifie si une sous-chaîne fournie est contenue dans une autre chaîne. Ce test d’expression est utilisé en conjonction avec l’opérateur 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 %}

string_startingwith

Vérifie si une chaîne commence par une chaîne particulière. Il est utilisé en conjonction avec l’opérateur 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 %}

truthy

Vérifie si une expression est égale à True. L’exemple ci-dessous utilise un module de case à cocher booléenne pour afficher un message d’alerte.
{% 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 %}

undefined

Vérifie si une variable est indéfinie dans le contexte du modèle. Ce test est différent du test d’expression none, dans la mesure où le test undefined est défini sur true lorsque la variable est présente mais n’a pas de valeur, alors que none est défini sur true lorsque la variable a une valeur nulle. L’exemple ci-dessous vérifie l’existence de la variable “my_var” dans un modèle.
{% if my_var is undefined %}
A variable named "my_var" does not exist on this template.
{% else %}
{{ my_var }}
{% endif %}

upper

Vérifie si une chaîne est entièrement en majuscules. Vous trouverez ci-dessous un exemple inverse du test d’expression lower ci-dessus.
{% 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 %}

within

Vérifie si une variable est présente dans une liste.
{% 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 %}