Pular para o conteúdo

Templates

Um template é HTML e CSS com alguns extras. Os valores de data entram com {{ }}, e {% %} acrescenta lógica. A sintaxe é a do Tera, parecida com os templates Jinja e Django.

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

data é um objeto JSON. Acesse objetos com ponto (customer.name) e percorra listas com {% for %}. Uma variável chamada locale está sempre disponível e guarda o idioma da geração.

Os valores têm o HTML escapado: um nome como <b>Ana</b> aparece como texto, não como marcação. O seu template é marcação confiável; os seus dados não são.

  • {% if x %}…{% elif y %}…{% else %}…{% endif %} e comparações como x > 1.
  • {% for item in items %} com loop.index, loop.first e loop.last.
  • Aritmética: {{ price * qty }}.
  • {% set name = value %} para dar nome a um valor intermediário.

Os filtros do próprio Tera (upper, lower, round, length e outros) também funcionam. O serviço acrescenta três para formatação; veja Idiomas e formatação.

Templates não podem incluir outros arquivos nem ler nada fora da geração. A saída de uma geração tem um limite definido pelo plano, e um template que produz demais é recusado.

Crie e edite templates no portal, que pré-visualiza e valida enquanto você digita, ou pela API. Um template precisa compilar para ser salvo.

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

sample_data serve só para a pré-visualização do portal. Cada alteração aumenta a version do template. Templates pertencem a uma conta: o id de um template de outra conta dá 404.

data precisa ser um objeto JSON, com no máximo 32 níveis de profundidade e 200.000 valores, e não maior que o limite de entrada do seu plano.