Operatoren und Ausdrucktests

Last updated:
Um die Logik und Funktionalität Ihrer Vorlagen zu erweitern, unterstützt HubL mehrere wichtige Operatoren und Ausdruckstests. Operatoren ermöglichen es Ihnen, mathematische Funktionen auszuführen, Vergleiche durchzuführen, die Logik von Vorlagen komplexer zu machen und die Darstellung durch Markup zu ändern. Darüber hinaus enthält dieser Artikel eine umfassende Liste von Ausdruckstests, die in HubL verwendet werden können.

Operatoren

Operatoren sind Symbole, die den HubL-Compiler anweisen, verschiedene Operationen auszuführen, die zur endgültigen Markup-Ausgabe führen. Im folgenden Abschnitt finden Sie eine Liste aller unterstützten HubL-Operatoren.

Mathematisch

Mathematische Standardoperatoren können zur Berechnung von Werten im Kontext einer Vorlage verwendet werden.

Symbol Beschreibung
+ Fügt zwei Objekte zusammen. Sie verwenden dies im Allgemeinen für die Addition von Zahlen. Wenn Sie versuchen, Listenzeichenfolgen zu verketten, sollten Sie stattdessen ~ verwenden.
- Subtrahiert eine Zahl von einer anderen.
/ Dividiert Zahlen.
% Gibt den Rest aus der Division von Zahlen zurück.
// Teilt zwei Zahlen und gibt das gerundete ganzzahlige Ergebnis zurück. Beispiel: {{ 20 // 7 }} ist 2
* Multipliziert Zahlen.
** Nimmt den linken Operanden hoch dem rechten Operanden.
{% 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

Vergleich

Vergleichsoperatoren können verwendet werden, um Werte für Vorlagenlogik auszuwerten. Einige Beispiele für die Verwendung von Vergleichsoperatoren in if-Anweisungen finden Sie hier

Symbol Kurzschreibweise Beschreibung
== eq Gleich. Wird als true ausgewertet, wenn zwei Objekte gleich sind.
!= ne Ungleich. Wird als true ausgewertet, wenn zwei Objekte nicht gleich sind.
> gt Größer als. Wird als true ausgewertet, wenn die linke Seite größer als die rechte Seite ist.
>= gte Größer als oder gleich. Wird als true ausgewertet, wenn die linke Seite größer oder gleich der rechten Seite ist.
< lt Kleiner als. Wird als true ausgewertet, wenn die linke Seite niedriger als die rechte Seite ist.
<= lte Kleiner als oder gleich. Wird als true ausgewertet, wenn die linke Seite kleiner oder gleich der rechten Seite ist.

Die Kurzschreibweise der Vergleichsoperatoren kann in Filtern verwendet werden, bei denen ein Ausdruck getestet wird, z. B. |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

Logisch

Mit logischen Operatoren können Sie mehrere Ausdrücke in einer einzigen Anweisung kombinieren.

Symbol Beschreibung
and Gibt true zurück, wenn der linke und der rechte Operand true sind.
or Gibt true zurück, wenn der linke oder der rechte Operand true ist.
not Negiert eine Aussage und wird in Verbindung mit is verwendet. Siehe folgende Beispiele.
(expr) Gruppieren Sie einen Ausdruck für die Reihenfolge der Operationen. Zum Beispiel: (10 - 2) * Variable.
?: Der ternäre Operator akzeptiert 3 Argumente (Ausdruck, „true“-Bedingung, „false“-Bedingung). Wertet einen Ausdruck aus und gibt die entsprechende Bedingung zurück.

Andere HubL-Operatoren

Nachfolgend sind weitere wichtige HubL-Operatoren aufgeführt, die zur Durchführung verschiedener Aufgaben verwendet werden können.

Symbol Beschreibung
in Überprüft, ob ein Wert in einer Sequenz enthalten ist.
is Führt einen Ausdruckstest durch.
| Wendet einen Filter an.
~ Verkettet Werte.

Ausdrucktests

Ausdruckstests sind verschiedene boolesche Bedingungen, die mithilfe von logischen Operatoren ausgewertet werden können.

boolean

Mit dem boolean-Ausdruckstest wird überprüft, ob das Objekt boolesch ist (im strengen Sinne, nicht in seiner Fähigkeit, zu einem wahrheitsgemäßen Ausdruck auszuwerten).

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

containing

Mit dem containing-Ausdruckstest wird überprüft, ob eine Listenvariable einen Wert enthält.

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

containingall

Mit dem containingall-Ausdruckstest wird überprüft, ob eine Listenvariable alle Werte einer anderen Liste enthält.

{% 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

Mit dem defined-Ausdruckstest wird überprüft, ob eine Variable im Kontext der Vorlage definiert ist. Sie können diesen Ausdruckstest zwar verwenden, aber beim Schreiben einer if-Anweisung ohne Operatoren wird standardmäßig geprüft, ob die Variable definiert ist.

In dem folgenden Beispiel wird der color-Parameter eines Farbmoduls getestet. Hätte der color-Parameter keinen Wert, würde die Vorlage standardmäßig eine schwarze Hintergrundfarbe darstellen. Wenn er angegeben ist, wird die vom Benutzer festgelegte Hintergrundfarbe dargestellt.

{% 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

Mit dem divisibleby-Ausdruckstest kann getestet werden, ob ein Objekt durch eine andere Zahl teilbar ist.

Im Folgenden wird zum Beispiel eine for-Schleife erstellt, die eine Liste von Tierarten durchläuft. Jede Tierart wird in einem div gedruckt, und jedes 5. div hat ein anderes Inline-Styling (Breite:100 %). Dieses Konzept könnte auf einen Blog angewendet werden, in dem für ein bestimmtes Muster von Beiträgen ein anderes Markup gerendert wird. Weitere Informationen zu for-Schleifen und loop.index finden Sie in diesem Artikel

{% 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

Mit dem equalto-Ausdruckstest wird überprüft, ob der Wert einer Variablen gleich einer Konstanten oder einer anderen Variablen ist. Sie können auch den Operator == verwenden, um denselben Test durchzuführen.

Im folgenden Beispiel wird die Breite der Blog-Beiträge auf der Grundlage der Gesamtzahl der Beiträge in der Schleife angepasst. In der Beispielausgabe wird davon ausgegangen, dass der Blog 4 Beiträge enthält. 

{% 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

Mit dem even-Ausdruckstest wird überprüft, ob eine numerische Variable eine gerade Zahl ist. 

Das folgende Beispiel zeigt eine vereinfachte Blog-Listing-Schleife. Wenn die aktuelle Iteration der Schleife gerade ist, wird dem post item-div die even-post-Klasse zugewiesen. Andernfalls wird die odd-post-Klasse zugewiesen. 

{% 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

Mit dem float-Ausdruckstest wird überprüft, ob eine numerische Variable eine Gleitkommazahl ist. 

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

integer

Überprüft, ob eine Variable eine ganze Zahl ist.

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

iterable

Überprüft, ob eine Variable iterierbar ist und in einer Schleife durchlaufen werden kann.

In diesem Beispiel wird eine Variable namens „jobs“ daraufhin überprüft, ob sie durchlaufen werden kann. Da die Variable eine Liste von Jobs enthält, würde die if-Anweisung als true ausgewertet werden, und die Schleife würde ausgeführt werden. Hätte die Variable einen einzelnen Wert enthalten, würde die if-Anweisung diesen Wert stattdessen mit anderem Markup ausgeben. Erfahren Sie mehr über für for-Schleifen

{% 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

Der Test lower-Ausdruck wird als true ausgewertet, wenn eine Zeichenkette klein geschrieben ist. 

Im folgenden Beispiel wird mithilfe einer unless-Anweisung und eines lower-Filter sichergestellt, dass eine in einen Textbaustein eingegebene Textzeichenfolge immer klein geschrieben wird.

{% 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

Mit dem mapping-Ausdruckstest wird überprüft, ob ein Objekt ein Dictionary (Wörterbuch) ist. 

Im folgenden Beispiel wird überprüft, ob das Kontaktobjekt ein Dictionary ist, was hier auch der Fall ist. 

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

none

Mit dem none-Ausdruckstest wird überprüft, ob eine Variable einen Nullwert hat.

{% 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

Mit dem number-Ausdruckstest wird überprüft, ob der Wert einer Variablen eine Zahl ist.

Im folgenden Beispiel wird überprüft, ob es sich bei einer Variablen um eine Variable handelt, und wenn ja, wird sie in Millionen umgewandelt.

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

odd

Mit dem odd-Ausdruckstest wird überprüft, ob eine numerische Variable eine ungerade Zahl ist.

Im Folgenden wird dasselbe Beispiel wie der zuvor beschriebene inverse-even-Ausdruckstest verwendet.

{% 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

Mit dem sameas-Ausdruckstest wird überprüft, ob zwei Variablen den gleichen Wert haben. 

Im folgenden Beispiel werden zwei Variablen festgelegt und dann wird überprüft, ob sie gleich sind.

{% 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

Der sequence-Ausdruckstest ähnelt dem iterable-Ausdruckstest darin, dass überprüft wird, ob eine Variable eine Sequenz ist.  

Im folgenden Beispiel wird überprüft, ob eine Variable eine Sequenz ist, und dann wird diese Sequenz von Musikgenres durchlaufen.

{% 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

Mit dem string-Ausdruckstest wird überprüft, ob der in einer Variablen gespeicherte Wert ein Text ist. 

Im folgenden Beispiel wird überprüft, ob eine Variable eine Zeichenkette ist, und wenn ja, wird ein title-Filter angewendet, um die Großschreibung zu ändern. 

{% 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

Mit diesem Test wird überprüft, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist. Dieser Ausdruckstest wird in Verbindung mit dem Operator „is“ verwendet.
{% 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

Mit diesem Ausdruckstest wird überprüft, ob eine Zeichenkette mit einer bestimmten Zeichenkette beginnt. Er wird in Verbindung mit dem Operator „is“ verwendet.

{% 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

Mit dem truthy-Ausdruckstest wird überprüft, ob ein Ausdruck als true ausgewertet wird.

Im folgenden Beispiel wird ein boolesches Kontrollkästchenmodul verwendet, um eine Warnmeldung anzuzeigen.

{% 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

Mit dem undefined-Ausdruckstest wird überprüft, ob eine Variable im Kontext der Vorlage undefiniert ist. Dieser Test unterscheidet sich von none dadurch, dass undefined true ist, wenn die Variable vorhanden ist, aber keinen Wert hat; none hingegen ist true, wenn die Variable einen Nullwert hat.  

Im folgenden Beispiel wird eine Vorlage auf das Vorhandensein der Variablen „my_var“ überprüft.

{% 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

Der upper-Ausdruckstest wird als true ausgewertet, wenn eine Zeichenkette durchgehend in Großbuchstaben geschrieben ist. Nachfolgend finden Sie ein umgekehrtes Beispiel für den obigen Test des lower-Ausdrucks.

{% 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

Mit dem within-Ausdruckstest wird überprüft, ob eine Variable innerhalb einer Liste liegt.
{% 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!

War dieser Artikel hilfreich?
Dieses Formular dient dazu, Feedback zu unserer Entwicklerdokumentation zu sammeln. Wenn Sie uns Ihre Meinung zu HubSpot-Produkten mitteilen möchten, teilen Sie diese bitte im Ideenforum der Community.