1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
.. -*- coding: utf-8 -*-
.. _annexe-technique-4-jinja-filters:
==========================================================
Annexe technique 4 - Filtres pour les patrons de documents
==========================================================
:Auteurs: Étienne Loks, Valérie-Emma Leroux
:Date: 2024-09-30
:Copyright: CC-BY 3.0
----------------------------------
Les patrons de documents permettent d'utiliser des filtres sur les données de la base de données. Cela permet essentiellement de mettre en forme les champs. Certains de ces filtres sont directement disponibles via la bibliothèque Jinja utilisée dans Ishtar, d'autres ont été développés au sein d'Ishtar.
Pour utiliser un filtre, à la suite de la variable, il faut utiliser le
caractère `|`, par exemple : `{{variable|capfirst}}`.
.. note:: Les filtres peuvent se chaîner. On peut donc écrire : `{{variable|human_date|capitalize}}.`
Pour les différents exemples nous utilisons directement une chaîne de caractères pour illustrer, en utilisation réelle on utilise un nom de variable.
La bibliothèque logicielle Jinja utilisée pour la génération des patrons met à disposition nativement un certain nombre de filtres : `documentation des filtres de base (anglais) <https://jinja.palletsprojects.com/en/2.11.x/templates/#list-of-builtin-filters>`_.
Ishtar met a disposition des filtres supplémentaires :
Formatage des chaînes de caractères
-----------------------------------
- **capfirst**
Ce filtre met la première lettre en majuscule et ne touche pas au reste de la
chaîne.
- `{{\"saint georges d'oléron\"|capfisrt}}` -> `Saint georges d'oléron`
- **lowerfirst**
Ce filtre met la première lettre en minuscule et ne touche pas au reste de la
chaîne
- `{{\"SAINT-GEORGES-D'OLÉRON\"|lowerfirst}}` -> `sAINT-GEORGES-D'OLÉRON`
- **capitalize**
Ce filtre met la première lettre de chaque mot en majuscule et le reste de la
chaîne en minuscule. Les articles (exemple : « le », « d' ») et prépositions (exemple : « sous », « sur ») ne sont pas accentués.
- `{{\"SAINT-GEORGES-D'OLÉRON\"|capitalize}}` -> `Saint-Georges-d'Oléron`
- **human_date**
Ce filtre permet d'afficher une date en toutes lettres.
- `{{\"2020-03-03\"|human_date}}` -> `3 mars 2020`
- **int**
Pour afficher un nombre sans décimales.
- `{{\"600.0\"|int}}` -> `600`
- **float_format**
Ce filtre permet d'afficher un nombre à virgule de manière localisée (en français utilisation de la virgule comme séparateur décimal). Comme le filtre `int` supprime la partie après la virgule si non nécessaire.
- `{{\"42.5\"|float_format}}` -> `42,5`
- `{{\"42.0\"|float_format}}` -> `42`
- **number_to_words**
Ce filtre traduit un nombre en texte.
- `{{\"42\"|number_to_words}}` -> `quarante deux`
Opérations mathématiques
------------------------
Pour ces opérations, le premier argument est générallement une variable, une conversion de celle-ci est faite en nombre à virgule. Si la conversion échoue le résultat de l'opération est `0`.
- **add**
Addition. Un nombre est attendu en paramètre, le nombre avec lequel additionner.
- `{{\"3\"|add(1)}}` -> ` -> `4`
- **sub**
Soustraction. Un nombre est attendu en paramètre, le nombre avec lequel soustraire.
- `{{\"3\"|sub(1)}}` -> ` -> `2`
- **multiply**
Multiplication. Un nombre est attendu en paramètre, le nombre avec lequel multiplier.
- `{{\"3\"|multiply(2)}}` -> ` -> `6`
Manipulation des chaînes de caractères
--------------------------------------
- **splitpart**
Ce filtre permet d'extraire un élément depuis une chaîne de
caractères en prenant en compte un séparateur. Par exemple depuis la chaîne
`"2,3,10"`, accéder au troisième élément : `"10"`.
Ce filtre nécessite au minimum un argument, le numéro de l'élément souhaité (en
commençant le compte à 0) : pour avoir le second élément, il faut indiquer en argument
`"1"`.
Le second argument correspond à la borne de fin non incluse (en commençant le
compte à 0) : ainsi pour avoir jusqu'au deuxième élément il faut indiquer en argument
`"2"`. Si l'on ne souhaite avoir qu'un seul élément, on indique `"0"`.
Par défaut le séparateur `","` est utilisé si l'on souhaite un autre
séparateur, on spécifie celui-ci en troisème argument.
On peut associer un dernier argument qui permet de spécifier le(s) caractère(s) de
concaténation que l'on souhaite utiliser pour la chaîne en retour.
- `{{\"9,2,10\"|splitpart(1)}}` -> `2`
- `{{\"chaise;bureau;papier;paragraphe\"|splitpart(0,0,\";\")}}` -> `chaise`
- `{{\"182025_C001\"|splitpart(1,0,\"_\")}}` -> `C001`
- `{{\"chaise;bureau;papier;paragraphe\"|splitpart(1,3,\";\")}}` -> `bureau;papier`
- `{{\"chaise;bureau;papier;paragraphe\"|splitpart(1,4,\";\",\"|\")}}` -> `bureau|papier|paragraphe`
|