En este artículo explicaremos cómo utilizar el Lenguaje de Plantillas de Brevo para modificar los marcadores de posición en sus emails mediante filtros.
🤔 ¿Qué son los filtros?
Los filtros cambian el resultado de un marcador de posición. Se utilizan con llaves dobles
{{ }} y están separados por una barra vertical |, por ejemplo: {{ contact.NAME|upper }}. Se pueden encadenar varios filtros y el resultado de un filtro se aplicará al siguiente.
Si quiere añadir un filtro a un marcador de posición en una campaña de email o plantilla, deberá añadirlo de forma manual. En el editor Drag & Drop, también tiene que escribir el marcador de posición de forma manual, ya que no se puede añadir un filtro a un marcador de posición que se añadió mediante la opción de Personalization (Personalización).
Agregar un marcador de posición simple con la opción Personalization (Personalización) | |
Agregar un marcador de posición con filtros manualmente |
💬 Insertar un valor predeterminado
default
Inserta un valor de recuperación predeterminad oen caso de que el valor de la variable esté vacío.
Entrada | Resultado |
Hola, {{ contact.NAME|default:'there' }}: | Hola, qué tal: |
🔠 Formato de mayúsculas de la palabra
capfirst
Haga que el primer carácter de una variable aparezca en mayúsculas.
Entrada | Resultado |
{{ contact.MESSAGE|capfirst }} | Mi coche rojo |
title
Devuelve una versión con las mayúsculas del título del valor. Cada palabra empezará con mayúsculas y el resto de caracteres serán minúsculas.
Entrada | Resultado |
{{ contact.NAME|title }} | John Doe |
upper
Convierte cada carácter de una variable en mayúscula.
Entrada | Resultado |
{{ contact.NAME|upper }} | JOHN DOE |
lower
Convierte cada carácter de una variable en minúscula.
Entrada | Resultado |
{{ contact.NAME|lower }} | john doe |
truncatechars
Acorta una variable si supera el número de caracteres especificados. La variables truncadas acabarán con una elipsis (…) incluida en el recuento de caracteres.
Entrada | Resultado |
{{ contact.MANAGER|truncatechars:7 }} | Elisab… |
🔢 Formato de números
floatformat
Redondea el resultado de los valores flotantes de sus variables a un decimal especificado.
Para que funcione correctamente, los valores deben incluirse como número, en lugar de como cadena, y los valores no deben incluirse entre comillas como “valor”.
Entrada | Resultado |
{{ contact.BALANCE|floatformat:2 }} | 40.32 |
{{ contact.BALANCE|floatformat:0 }} | 40 |
integer
Convierte un número en formato de cadena o punto flotante en un número entero.
Entrada | Resultado |
{{ 10.578|integer }} | 10 |
{{ "16.765"|integer }} | 16 |
float
Convierte un número en formato de cadena o entero en un número de coma flotante.
Entrada | Resultado |
{{ 10|float }} | 10.000000 |
{{ "16.765"|float }} | 16.765000 |
lang_format
Cambia el formato del número según el idioma del destinatario.
Entrada | Resultado |
{{ params.NUMBER|lang_format:"fr" }} | 123 456,789 |
{{ params.NUMBER|lang_format:"en" }} | 123,456.789 |
{{ params.NUMBER|lang_format:"hi" }} | 1,23,456.789 |
{{ params.NUMBER|lang_format:"bn" }} | ১,২৩,৪৫৬.৭৮৯ |
{{ params.NUMBER|lang_format:"fr,%.2f" }} | 123 456,79 |
Nota:
- Para forzar 2 decimales, añada ,%.2f después del idioma de la variable.
- En francés, el separador de enteros es un espacio de no separación.
📅 Formato de fecha y hora
- Si no se incluye un valor se considerará que es 0.
- La zona horaria predeterminada (si no se incluye) es UTC.
- Puede utilizar las palabras clave am/pm.
- Las formas más habituales de definir la zona horaria son: las palabras clave específicas(MST, CET, UTC, Asia/Kolkata etc.), o con formato númerico, +0100 o -0100, a UTC.
time_parse
Convierte el formato de su fecha (incluido como una cadena) a un formato de fecha estándar que puede utilizarse con otros filtros.
Para incluir el formato de fecha actual como un argumento, utilice el mismo formato de fecha/hora con el que se mostraría la hora de referencia si este fuera el valor.
Entrada | Resultado |
{{ params.MY_DATE|time_parse:"Monday 02 January 2006" }} | Tuesday 11 March 2021 |
Nota: Si el formato de su cadena utiliza RFC3339 puede utilizar el parse específico time_parse_rfc3339 sin argumento.
date
Convierte la fecha a un formato concreto.
Obtendrá una fecha de una cadena utilizando el filtro time_parse o la hora actual utilizando el filtro date en el marcador de posición time_now.
Entrada | Resultado |
{{ "14:01 01/06/2018"|time_parse:"15:04 02/01/2006"|date:"Mon Jan 2 15:04:05 2006" }} | Fri Jun 1 14:01:00 2018 |
{{ time_now|date:"Monday, Jan 2, 2006" }} | Imprimirá el día y la fecha actual en el formato especificado. |
{{ time_now|date:"02/01/2006" }} | Imprimirá el día y la fecha actual en el formato especificado. |
{{ time_now|date:"01" }} |
Imprimirá el mes actual |
{{ time_now|date:"02" }} |
Imprimrá el día actual |
{{ time_now|date:"2006" }} |
Imprimirá el año actual |
date_i18n
Convierte una fecha a un formato específico, pero la salida estaría en otros idiomas.
Actualmente, los idiomas admitidos son en, fr, it, es, de y pt. Este filtro es similar al filtro "date", y la única diferencia es que primero se debe especificar el idioma en el filtro y luego el formato.
Entrada | Resultado |
{{ "14:01 01/06/2018" | time_parse:"15:04 02/01/2006"|date_i18n:"en,Monday" }} | Friday |
{{ "14:01 01/06/2018" | time_parse:"15:04 02/01/2006"|date_i18n:"de,Monday" }} | Freitag |
time_add_date
Añade el número de días a un sello temporal o a una cadena de fecha. Es obligatorio incluir todos los valores en este filtro en este orden: "año, mes, día".
Entrada | Resultado |
{{ time_now|time_add_date:"1,2,3" }} | Imprimirá el sello temporal añadiendo 1 año, 2 meses y 3 días al sello temporal actual |
{{ "14:01 01/06/2018"|time_parse:"15:04 02/01/2006"|time_add_date: "1,2,3" }} |
2019-08-04 14:01:00 +0000 UTC |
time_in_location
Convierte un sello temporal o una cadena de fecha según la zona horaria incluida en el filtro. Es obligatorio incluir la zona horaria en el filtro con este formato: "ubicación/zona horaria”.
Entrada | Resultado |
{{ time_now|time_in_location:"Europe/Berlin" }} | Imprimirá el sello temporal actual en CEST |
{{ "14:01 01/06/2018"|time_parse:"15:04 02/01/2006"|time_in_location: "Europe/Berlin" }} | 2018-06-01 16:01:00 +0200 CEST |
time_add_duration
Añade la duración a un sello temporal o a una cadena de fecha. Es obligatorio incluir al menos un valor (hora, minuto o segundo) al filtro.
Entrada | Resultado |
{{ time_now|time_add_duration:"1h2m3s" }} | Imprimirá el sello temporal después de añadir 1 hora, 2 minutos y 3 segundos al valor temporal en el sello temporal actual |
{{ time_now|time_add_duration:"30m" }} | Imprimirá el sello temporal después de añadir 30 minutos al valor temporal |
time_unix
Convierte un valor temporal a un sello temporal Unix en segundos.
Entrada | Resultado |
{{ time_now|time_unix }} | Imprimirá el sello temporal Unix en segundos |
time_unix_nano
Convierte un valor temporal a un sello temporal Unix en nanosegundos.
Entrada | Resultado |
{{ time_now|time_unix_nano }} | Imprimirá el sello temporal Unix en nanosegundos |
🧑💻 Codificar o encriptar datos
base64_encode o decode
Codifica o descodifica en base64:
- base64_decode descodifica una cadena a un []byte
- base64_encode codifica un []byte a una cadena
Entrada | Resultado |
https://example.com/test?name={{ contact.FIRSTNAME|base64_encode }} | https://example.com/test?name=RW56bw== (en lugar de https://example.com/test?name=Enzo) |
Los filtros base64_encode y decode pueden coger un parámetro de codificación adicional:
- std: codificación normal en base64,
- raw_std: codificación normal en base64, sin los caracteres = de relleno,
- url: versión segura de URL de codificación en base64, + y / se sustituyen por - y _ respectivamente,
- raw_url: una combinación de raw y url.
aes_128, 192 o 256
Encripta un valor. Por ejemplo, se puede usar este filtro para enviar información de contacto encriptada en una URL, como una dirección de email o un ID.
La variante AES utilizada depende de la longitud de la clave proporcionada:
Longitud de la clave secreta | Variante AES |
16 bytes (128 bits) | AES-128 |
24 bytes (192 bits) | AES-192 |
32 bytes (256 bits) | AES-256 |
Por ejemplo, para la variante AES-256, el marcador de posición debe tener el formato {{ contact.ATTRIBUTE | aes_256:"key" }}, donde la clave:
- Debe tener 32 dígitos.
- Debe haber sido generada aleatoriamente.
- Debe persistir en su lado para poder desencriptar el valor original.
De manera predeterminada, si no se añade ningún parámetro de codificación, se utilizará base64 std. Si no, también admite:
- raw_std: codificación normal en base64, sin los caracteres = de relleno,
- url: versión segura de URL de codificación en base64, + y / se sustituyen por - y _ respectivamente,
- raw_url: una combinación de raw y url.
En los siguiente ejemplos, hemos encriptado las direcciones de email de nuestros contactos utilizando la clave: e5a34a481274c776856d04119bed8188. Tenga en cuenta que no debe usar esta misma clave, sino generar su propia clave según los requisitos anteriores.
Codificación | Entrada | Resultado |
Sin codificación (codificación predeterminada base64 std) |
{{ contact.EMAIL | aes_256: "e5a34a481274c776856d04119bed8188" }} |
Imprime una cadena aleatoria que debe desencriptarse para leer el valor original |
Codificación Base64 raw_std |
{{ contact.EMAIL | aes_256: "e5a34a481274c776856d04119bed8188, raw_std" }} |
Imprime una cadena aleatoria que debe desencriptarse para leer el valor original |
Codificación Base64 url |
{{ contact.EMAIL | aes_256: "e5a34a481274c776856d04119bed8188, url" }} |
Imprime una cadena aleatoria que debe desencriptarse para leer el valor original |
Codificación Base64 raw_url |
{{ contact.EMAIL | aes_256: "e5a34a481274c776856d04119bed8188, raw_url" }} |
Imprime una cadena aleatoria que debe desencriptarse para leer el valor original |
🔎 Otros filtros
first
Devuelve el primer elemento de una secuencia, un mapeo o una cadena.
Entrada | Solicitud API | Resultado |
{{ params.array|first }} | "params" : { "array" : [ 1,2,3,4 ] } |
1 |
join
Combina los elementos de un conjunto en una sola cadena utilizando el argumento como separador.
El separador entre elementos es una variable vacía de forma predeterminada. Puede definirlo con el primer parámetro opcional.
Entrada | Resultado |
{{ [1, 2, 3]|join }} | 123 |
{{ [1, 2, 3]|join: '|' }} |
1|2|3 |
last
Devuelve el último elemento de una secuencia, un mapeo o una cadena.
Entrada | Resultado |
{{ [1, 2, 3, 4]|last }} | 4 |
length
Devuelve el número de elementos de una secuencia o un mapeo, o la longitud de una cadena.
Entrada | Resultado |
{{ ['a', 'b', 'c', 'd']|length }} | 4 |
safe
Marca una cadena para indicar que no requiere caracteres de escape de HTML antes de la salida.
A |
Solicitud API |
Entrada | Resultado | |
"params" :{HtmlTest: "<p>This is my test sentence.</p>"} |
{{ params.htmltest|safe }} |
This is my test sentence | ||
B |
Atributo de contacto |
Marcador de posición |
Entrada | Resultado |
EMAIL_SALUTATION | Welcome to <b>Brevo</b>, we're glad to have you here | {{ contact.EMAIL_SALUTATION|safe }} | Welcome to Brevo, we're glad to have you here |
Sin el filtro "safe" la etiqueta HTML aparecería como una cadena normal en el email del destinatario: "<p>Esta es mi frase de prueba</p>" o "Welcome to <b>Brevo</b>, we're glad to have you here".
slice
Extrae un trozo de una frase, mapeo o cadena.
Este filtro se puede configurar para:
A | Hará un bucle solo en los primeros "n" números de elementos de un conjunto | En ambos casos, recuerde que los elementos de un conjunto se asignan a un único número de posición que empieza con "0" en la primera posición (se conocen como "indexados a cero"). |
B | Recorrerá los elementos entre dos posiciones especificadas ("n" y "m") en el conjunto | |
C | Recorrerá los elementos entre dos elementos especificados de un conjunto. |
En cada ejemplo, imagine que su conjunto contiene: ["a","b","c","d","e","f","g","h"...].
|
Entrada | Resultado |
A |
{% for product in params.products|slice:':5' %} {{ product.name }} - {{ product.price }} {% endfor %} |
Recorrerá las primeras 5 posiciones (0-4), que son: ["a","b","c","d","e"] |
B | {% for product in params.products|slice:'2:3' %} {{ product.name }} - {{ product.price }} {% endfor %} |
Recorrerá las posiciones (2-3), que son: ["c","d"] |
C | {% for product in params.products|slice:'b:d' %} {{ product.name }} - {{ product.price }} {% endfor %} |
Recorrerá los elementos especificados, que son: ["b","c","d"] |
📖 Recursos adicionales
El Lenguaje de Plantillas de Brevo se basa en Pongo2, una reimplementación de Django in Go (un lenguaje de programación).
Todas las etiquetas compatibles
autoescape, comment, cycle, filter, firstof, for, if, ifchanged, now, set, spaceless, templatetag, with.
Todos los filtros compatibles
escape, safe, escapejs, add, addslashes, capfirst, center, cut, date, default, default_if_none, divisibleby, first, floatformat, get_digit, iriencode, join, last, length, length_is, linebreaks, linebreaksbr, linenumbers, ljust, lower, make_list, phone2numeric, pluralize, random, removetags, rjust, slice, stringformat, striptags, time, title, truncatechars, truncatechars_html, truncatewords, truncatewords_html, upper, urlencode, urlize, urlizetrunc, wordcount, wordwrap, yesno.
Todos los filtros compatibles con algoritmos hash
hash_md5, hash_sha256, hash_sha256_224, hash_sha512, hash_sha512_224, hash_sha512_256, hash_sha512_384, hash_sha3_224, hash_sha3_256, hash_sha3_384, hash_sha3_512.
⏩ ¿Qué es lo siguiente?
- Cómo personalizar los emails transaccionales
- Desactive el escape automático para mostrar llaves dobles en sus emails
🤔 ¿Tiene alguna duda?
Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro equipo de asistencia mediante la creación de un ticket desde su cuenta. Si todavía no tiene una cuenta, puede ponerse en contacto con nosotros aquí.
Si necesitas ayuda con un proyecto usando Brevo, podemos ponerte en contacto con un socio certificado de Brevo.