templating expose le moteur de templates Django aux utilisateurs finaux de Mayan. Partout où une valeur peut être dynamique — nommage automatique de documents, sujets d'e-mail, métadonnées calculées, conditions de workflows — c'est cette app qui évalue les expressions {{ variable }} et {% tag %} saisies dans l'interface.
Elle fournit :
Template isolée avec ses propres templatetags métierTemplateContextEntry) documentées automatiquementTemplate — le moteur isoléMayan instancie son propre EngineHandler Django (distinct du moteur principal) avec ses templatetags toujours chargés en builtins. Cela permet d'évaluer des chaînes de template fournies par l'utilisateur sans polluer le contexte global.
from mayan.apps.templating.template_backends import Template
template = Template(template_string='Bonjour {{ document.label }}')
result = template.render(context={'document': document})
# → "Bonjour Contrat_2026.pdf"
TemplateContextEntry — variables documentéesChaque variable disponible dans un contexte de template est enregistrée avec son nom et sa description. Cela permet à l'interface d'afficher automatiquement un texte d'aide précis.
from mayan.apps.templating.template_backends import TemplateContextEntry
TemplateContextEntry(
name='date',
description=_('Current date'),
value=lambda: now().date(),
always_available=True # Injecté dans tous les contextes sans déclaration explicite
)
Les entrées marquées always_available=True sont injectées automatiquement dans chaque rendu. Les autres doivent être listées explicitement dans context_entry_name_list.
ModelTemplating — sandbox par objetEnregistrer un modèle pour le sandbox permet à l'utilisateur de tester des templates sur un objet réel depuis l'interface :
# Dans apps.py
from mayan.apps.templating.classes import ModelTemplating
ModelTemplating(model=Document, variable_name='document')
Cet appel ajoute :
permission_template_sandbox sur le modèleDans le sandbox, l'utilisateur saisit {{ document.label|upper }} et voit le résultat immédiatement sur l'objet sélectionné.
TemplateFieldChamp texte (CharField) avec widget dédié. Affiche automatiquement dans le texte d'aide toutes les variables de contexte disponibles :
"Use Django's default templating language. Available template context variables:
{{ date }} - Current date, {{ document }} - Document instance"
ModelTemplateFieldVariante de TemplateField liée à un modèle spécifique. Le widget active le bouton de sandbox pour tester directement depuis le formulaire.
Tous les tags suivants sont builtins dans le moteur Mayan — disponibles dans tout template utilisateur sans {% load %}.
templating_datetime_tags)| Tag / Filtre | Usage | Exemple |
|---|---|---|
\|date_parse_iso |
Parse une date ISO 8601 | {{ "2026-04-16"\|date_parse_iso }} |
{% date_parse %} |
Parse une date avec format | {% date_parse "16/04/2026" "%d/%m/%Y" %} |
{% timedelta %} |
Ajoute un delta à une date | {% timedelta date days=7 %} |
templating_json_tags)| Tag / Filtre | Usage |
|---|---|
\|json_load |
Désérialise une chaîne JSON en objet Python |
templating_math_tags)| Filtre | Opération |
|---|---|
\|math_add:N |
Addition |
\|math_subtract:N |
Soustraction |
\|math_multiply:N |
Multiplication |
\|math_divide:N |
Division |
\|math_floor_divide:N |
Division entière |
\|math_modulo:N |
Modulo |
\|math_exponentiate:N |
Puissance |
\|math_ceil |
Arrondi supérieur |
\|math_floor |
Arrondi inférieur |
\|math_round:N |
Arrondi à N décimales |
\|math_absolute |
Valeur absolue |
\|math_square_root |
Racine carrée |
\|math_integer |
Conversion en entier |
\|math_maximum:N |
Maximum entre valeur et N |
\|math_minimum:N |
Minimum entre valeur et N |
{% math_percent value total %} |
Pourcentage arrondi |
templating_regex_tags)| Tag | Usage |
|---|---|
{% regex_findall pattern string %} |
Retourne toutes les correspondances |
{% regex_match pattern string %} |
Correspondance depuis le début |
{% regex_search pattern string %} |
Recherche dans la chaîne |
{% regex_sub pattern repl string %} |
Substitution |
Flags optionnels : ignorecase=True, multiline=True, dotall=True, etc.
templating_tags)| Tag / Filtre | Usage |
|---|---|
\|dict_get:key |
Accès à une clé de dictionnaire |
\|dictionary_flatten |
Aplatit un dict en chaîne |
\|object_flatten |
Aplatit les attributs d'un objet |
\|split:sep |
Découpe une chaîne |
\|to_base64 |
Encode en base64 |
{% method obj "methode" arg %} |
Appelle une méthode sur un objet |
{% range N %} |
Génère une séquence (comme range() Python) |
{% set value %} |
Assigne une valeur à une variable |
{% spaceless_plus %} |
Supprime les espaces (version étendue) |
templating_yaml_tags)| Filtre | Usage |
|---|---|
\|yaml_dump |
Sérialise un objet en YAML |
AJAXTemplateRegistre de templates HTML pré-rendus exposés via l'API REST (/api/v4/templates/). Permettent au frontend JavaScript de récupérer des fragments HTML régénérés à la demande, avec un hash SHA-256 pour la détection de changements.
Dans un workflow Mayan, on peut configurer une action qui renomme le document :
{{ document.document_type }} - {{ document.date_added|date:"Y-m-d" }} - {{ document.label }}
Rendu sur un document ajouté le 16 avril 2026 de type "Facture" :
Facture - 2026-04-16 - facture_fournisseur.pdf
| Fichier | Rôle |
|---|---|
template_backends.py |
Template (moteur isolé), TemplateContextEntry (registre de variables) |
classes.py |
ModelTemplating (sandbox), AJAXTemplate (fragments API) |
fields.py |
TemplateField, ModelTemplateField |
templatetags/ |
Tags custom : datetime, json, math, regex, yaml, divers |
utils.py |
process_regex_flags() — conversion des flags regex |