templatetags: add |range and |repeat (#89921) #1439
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/89921-create-list-with-fixed-length"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
143450632e
to4ecfaa26ab
4ecfaa26ab
tob75542a618
(c'est wip mais je pose déjà cette note)
@ -1176,2 +1176,4 @@
@register.filter(name='range')
def range_(start, stop):
Le ticket proposait range ou repeat, je serais pour le second uniquement.
Oui, et je ne voyais pas sur quoi me baser pour choisir ;)
parfait, merci !
@ -1216,0 +1225,4 @@
@register.filter
def repeat(to_repeat, repeat_count):
try:
return str(to_repeat) * repeat_count
Attention dans wcs, il faut commencer par passer les paramètres dans unlazy; aussi ça vaut le coup de passer repeat_count dans int().
Ok, merci !
J'avais fais ça initialement, mais j'étais revenu sur cette idée car ça me semblait contre-intuitif que le tag produise un résultat si le nombre de répétition est un float ( |repeat:2.8 par exemple ).
EDIT : un autre comportement contre-intuitif en passant repeat_count dans int()
|repeat:2.8
répète 2 fois|repeat:"2"
aussi|repeat:"2.8"
ne produit rienEst-ce que ça vaudrait pas le coup de passer repeat_count dans un int(float(...)) ?
Oui ça pourrait être passé dans parse_decimal puis vérifier que la valeur = int(valeur), enregistrer une erreur si ça n'est pas le cas, cf par exemple unaccent() pour l'appel à record_error().
Super, merci :)
Spontanément j'aurais eu tendance à enregistrer des erreurs pour les autres cas, typiquement un échec du parse_decimal. Mais comme ça n'a pas l'air d'être l'habitude je laisse do_raise à False : ça renverra une chaîne vide sans log d'erreur.
b75542a618
to1e1990e020
1e1990e020
to1da392ca7c
WIP: templatetags: add |range and |repeat (#89921)to templatetags: add |range and |repeat (#89921)1da392ca7c
to9802c1bf6a
@ -1393,0 +1400,4 @@
assert Template('{{ 42|repeat:2 }}').render(context) == '4242'
assert Template('{{ False|repeat:2 }}').render(context) == 'FalseFalse'
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ "ab"|make_list|repeat:2 }}').render(context)) == "['a', 'b']['a', 'b']"
Je ne sais pas si c'est utile : on pourrait peut être aussi gérer les répétition de listes/tuples ?
9802c1bf6a
toa050561035
@ -1393,0 +1401,4 @@
assert Template('{{ 42|repeat:2 }}').render(context) == '4242'
assert Template('{{ False|repeat:2 }}').render(context) == 'FalseFalse'
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ l|repeat:2 }}').render(context)) == "['a', 'b', 'a', 'b']"
Oui tout à fait ok de multiplier ainsi.
@ -1393,0 +1403,4 @@
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ l|repeat:2 }}').render(context)) == "['a', 'b', 'a', 'b']"
assert html.unescape(Template('{{ t|repeat:2 }}').render(context)) == "(1, 2, 'a', 1, 2, 'a')"
assert html.unescape(Template('{{ d|repeat:2 }}').render(context)) == "{'a': 1, 2: 'b'}{'a': 1, 2: 'b'}"
Je serais pour noter une erreur sur le |repeat d'un dictionnaire; en fait pour tout ce qui ne serait pas str, list, tuple, plutôt que faire str() dessus.
Ok, ça me semble aussi plus raisonnable !
Par contre j'ai laissé le passage de str() sur les entiers et les flottants, dit moi si tu penses que pour eux aussi il faudrait noter une erreur.
@ -1393,0 +1406,4 @@
assert html.unescape(Template('{{ d|repeat:2 }}').render(context)) == "{'a': 1, 2: 'b'}{'a': 1, 2: 'b'}"
assert Template('{{ "x"|repeat:0 }}').render(context) == ''
assert Template('{{ "x"|repeat:-2 }}').render(context) == ''
Ça serait bien de logguer une erreur également pour le cas de valeur négative.
Ok, fait :)
@ -1393,0 +1411,4 @@
assert Template('{{ "x"|repeat:2.99 }}').render(context) == ''
logged_error = pub.loggederror_class.select(order_by='id')[-1]
assert logged_error.summary == 'Repetition count 2.99 have non-zero decimal part'
Je serais pour mettre la valeur entre parenthèses, ça fera quelque chose plus lisible, notamment pour la traduction.
Ok, merci :)
a050561035
to4407ff1cfa
4407ff1cfa
to7b99cab8a2
Je pense que c'est ok ainsi.
7b99cab8a2
to2860d305f3