Filtres & fonctions Tera
Filtres d'assets
| Filtre | Description | Exemple |
|---|---|---|
static | Préfixe URL statique de l'app | {{ "css/main.css" | static }} |
media | Préfixe URL média de l'app | {{ "photo.jpg" | media }} |
Filtre Markdown
| Filtre | Description | Exemple |
|---|---|---|
markdown | Convertit du Markdown en HTML, sanitisé (anti-XSS) | {{ page.content | markdown }} |
Le filtre
markdowndéclareis_safe()— son HTML est émis sans échappement,\| safeest inutile et n'a pas besoin d'être ajouté manuellement.La sortie est sanitisée via ammonia : le HTML brut dangereux (
<script>, gestionnaireson*) et les URLjavascript:/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
| Filtre | Description | Exemple |
|---|---|---|
sanitize | Re-sanitise du HTML rich stocké et le rend en HTML | {{ entry.description | sanitize }} |
plaintext | Strip de tous les tags + décodage des entités → texte brut | {{ entry.description | plaintext }} |
sanitizerelance ammonia au moment du rendu ; commemarkdown, il déclareis_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.
plaintextprojette 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>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
| Filtre | Description | Exemple |
|---|---|---|
form | Rendu complet du formulaire | {{ nom_form | form }} |
form(field='xxx') | Rendu d'un seul champ | {{ nom_form | form(field='email') }} |
csrf_field | Gé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
| Filtre | Description |
|---|---|
humanize | Identifiant lisible : "changelog_entry" → "Changelog Entry". Pour des noms techniques (valeurs d'enum, colonnes), pas pour une saisie utilisateur |
format_date | Date-heure (NaiveDateTime) au format jj/mm/aaaa HH:MM |
display_time | Date-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 |
date | Date au format de votre choix ({{ d | date(format="%Y-%m-%d") }}) |
mask | Remplace une valeur par autant de puces que de caractères (affichage d'une valeur sensible) |
filesizeformat / filesize_format | Taille en octets lisible (1.2 MB) |
slugify / slug | Texte en slug d'URL |
striptags | Retire les balises HTML (reste échappé) |
spaceless | Retire les espaces entre balises |
regex_replace | Remplacement par expression régulière |
urlencode / urlencode_strict | Encodage pour une URL |
json_encode | Valeur en JSON |
shuffle | Mélange une liste |
Fonctions Tera
| Fonction | Description | Exemple |
|---|---|---|
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
| Variable | Description |
|---|---|
csrf_token | Token CSRF masqué (utilisé par {% csrf %} et | csrf_field) |
csp_nonce | Valeur nonce CSP du header (utilisé par {% csp %}) |
messages | Flash messages de la requête |
current_user | Compte connecté (username, id, rang…), relu en base à chaque requête ; absent pour un visiteur anonyme |
debug | Valeur de DEBUG |
dev | true avec RUNIQUE_ENV=dev |
current_path | Path de l'URL courante, sans query string (utile pour rel="canonical", og:url, navigation active) |