Templates
Documentation / Templates / Filtres & fonctions Tera

Filtres & fonctions Tera

Filtres d'assets

FiltreDescriptionExemple
staticPréfixe URL statique de l'app{{ "css/main.css" | static }}
mediaPréfixe URL média de l'app{{ "photo.jpg" | media }}

Filtre Markdown

FiltreDescriptionExemple
markdownConvertit du Markdown en HTML, sanitisé (anti-XSS){{ page.content | markdown }}

Le filtre markdown déclare is_safe() — son HTML est émis sans échappement, \| safe est inutile et n'a pas besoin d'être ajouté manuellement.

La sortie est sanitisée via ammonia : le HTML brut dangereux (<script>, gestionnaires on*) et les URL javascript: / data: des liens et images sont supprimés. Le Markdown légitime (titres, tables, listes, liens, images, code) est préservé — un Markdown rédigé par un utilisateur peut donc être rendu sans risque.


Filtres sanitize & plaintext

FiltreDescriptionExemple
sanitizeRe-sanitise du HTML rich stocké et le rend en HTML{{ entry.description | sanitize }}
plaintextStrip de tous les tags + décodage des entités → texte brut{{ entry.description | plaintext }}

sanitize relance ammonia au moment du rendu ; comme markdown, il déclare is_safe() directement (pas de \| safe à ajouter), donc le HTML émis est toujours fraîchement nettoyé — la sanitisation se fait à la sortie, sans jamais faire confiance à ce qui est stocké. À utiliser pour afficher un champ rich-text en HTML rendu.

plaintext projette une valeur en texte brut via le sanitizer strict (tags retirés, entités décodées). Il reste auto-échappé (pas de \| safe), donc un &gt; stocké s'affiche >. À utiliser pour les aperçus — ex. cellules de liste — où du HTML bloc rendu casserait la mise en page.

Les vues admin detail/list les emploient automatiquement pour les colonnes classées comme contenu rich ; tu les appelles rarement à la main.


Filtre de formulaire

FiltreDescriptionExemple
formRendu complet du formulaire{{ nom_form | form }}
form(field='xxx')Rendu d'un seul champ{{ nom_form | form(field='email') }}
csrf_fieldGénère un input hidden CSRF{{ csrf_token | csrf_field }}

Les trois déclarent is_safe() — leur sortie est émise sans échappement, \| safe est inutile.


Filtres utilitaires

FiltreDescription
humanizeIdentifiant lisible : "changelog_entry" → "Changelog Entry". Pour des noms techniques (valeurs d'enum, colonnes), pas pour une saisie utilisateur
format_dateDate-heure (NaiveDateTime) au format jj/mm/aaaa HH:MM
display_timeDate-heure au format aaaa-mm-jj HH:MM:SS et heure au format HH:MM:SS, comme dans l'admin ; toute autre valeur reste inchangée
dateDate au format de votre choix ({{ d | date(format="%Y-%m-%d") }})
maskRemplace une valeur par autant de puces que de caractères (affichage d'une valeur sensible)
filesizeformat / filesize_formatTaille en octets lisible (1.2 MB)
slugify / slugTexte en slug d'URL
striptagsRetire les balises HTML (reste échappé)
spacelessRetire les espaces entre balises
regex_replaceRemplacement par expression régulière
urlencode / urlencode_strictEncodage pour une URL
json_encodeValeur en JSON
shuffleMélange une liste

Fonctions Tera

FonctionDescriptionExemple
link(link='...')Résolution d'URL nommée{{ link(link='index') }}
csrf_token()Jeton CSRF masqué de la requête{{ csrf_token() }}
now()Date-heure courante{{ now() }}
get_random(start, end)Entier aléatoire{{ get_random(start=1, end=10) }}

Variables de contexte auto-injectées

VariableDescription
csrf_tokenToken CSRF masqué (utilisé par {% csrf %} et | csrf_field)
csp_nonceValeur nonce CSP du header (utilisé par {% csp %})
messagesFlash messages de la requête
current_userCompte connecté (username, id, rang…), relu en base à chaque requête ; absent pour un visiteur anonyme
debugValeur de DEBUG
devtrue avec RUNIQUE_ENV=dev
current_pathPath de l'URL courante, sans query string (utile pour rel="canonical", og:url, navigation active)