Ir al contenido

Plantillas

Una plantilla es HTML y CSS con algunos extras. Los valores de data se insertan con {{ }}, y {% %} añade lógica. La sintaxis es la de Tera, cercana a las plantillas Jinja y Django.

<h1>Factura {{ number }}</h1>
<p>{{ customer.name }}, emitida el {{ issued | date(style="long") }}</p>
<table>
{% for item in items %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.amount | currency(code="EUR") }}</td>
</tr>
{% endfor %}
</table>
{% if discount %}
<p>Descuento aplicado</p>
{% endif %}
<p>Total {{ total | currency(code="EUR") }}</p>

data es un objeto JSON. Accede a los objetos con un punto (customer.name) y recorre las listas con {% for %}. Una variable llamada locale está siempre disponible y contiene el idioma de la generación.

Los valores tienen el HTML escapado: un nombre como <b>Ana</b> aparece como texto, no como marcado. Tu plantilla es marcado de confianza; tus datos no lo son.

  • {% if x %}…{% elif y %}…{% else %}…{% endif %} y comparaciones como x > 1.
  • {% for item in items %} con loop.index, loop.first y loop.last.
  • Aritmética: {{ price * qty }}.
  • {% set name = value %} para dar nombre a un valor intermedio.

Los filtros propios de Tera (upper, lower, round, length y otros) también funcionan. El servicio añade tres para dar formato; consulta Idiomas y formato.

Las plantillas no pueden incluir otros archivos ni leer nada fuera de la generación. La salida de una generación tiene un límite fijado por el plan, y una plantilla que produce demasiado se rechaza.

Crea y edita plantillas en el portal, que previsualiza y valida mientras escribes, o mediante la API. Una plantilla debe compilar para poder guardarse.

Ventana de terminal
curl -X POST https://api.example.com/v1/templates \
-H "Authorization: Bearer $RUSTEDF_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Factura", "source": "<h1>{{ number }}</h1>", "locale": "es-ES",
"sample_data": { "number": "2025-0042" } }'

sample_data solo sirve para la vista previa del portal. Cada cambio aumenta la version de la plantilla. Las plantillas pertenecen a una cuenta: el id de una plantilla de otra cuenta da 404.

data debe ser un objeto JSON, de como máximo 32 niveles de profundidad y 200.000 valores, y no mayor que el límite de entrada de tu plan.