Development #64854
Filtre |join : permettre de mettre un retour à la ligne
0%
Description
J'ai voulu mettre en forme les résultats d'une requête avec un retour à la ligne mais visiblement ça n'est pas possible ou le mot-clé n'est pas évident.
J'ai essayé :
{{ cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet"|getlist:"contenu"|join:newline }} {{ cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet"|getlist:"contenu"|join:"<br>" }} {{ cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet"|getlist:"contenu"|join:"\n" }}
(j'affiche le résultat dans un mail)
Serait-il possible de le permettre ?
Files
History
Updated by Frédéric Péters 9 months ago
un retour à la ligne
C'est bien large, selon le contexte d'utilisation le caractère "retour à la ligne" sera visible tel quel (mail en texte brut), ou pas (mail ou affichage html en général)
(j'affiche le résultat dans un mail)
Ça va dépendre du mail, texte ou html, et quand c'est "texte" c'est en fait reStructuredText et ça vient avec ses propres règles.
Pour ce genre de demande il faut tout le contexte, pointer précisément l'endroit où un retour à la ligne doit être visible.
Updated by Frédéric Péters 9 months ago
Aussi, s'il fallait s'en tenir au sujet du ticket, qui parle du filtre |join, il y aurait à noter que dans certaines situations ça ne marcherait pas, par exemple pour les emails reStructuredText où pour voir des retours à la ligne visible l'option classique est de commencer chacune des lignes par un symbole |
| ligne 1 | ligne 2 | ligne 3
Souvent donc pour cette demande je dirais que |join n'est pas approprié, qu'il y aurait à faire dans le mail une boucle ({% for %}),
Updated by Thomas Noël 9 months ago
Typiquement :
{% for card in cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet" %} | {{ card.fields.contenu }} {% endfor %}
ou en HTML :
<ul> {% for card in cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet" %} <li>{{ card.fields.contenu }}</li> {% endfor %} </ul>
etc.
Updated by Marie Kuntz (absente) 9 months ago
Je ne peux pas faire ça car je mets d'abord les valeurs dans des données de traitement, je n'ai donc pas le retour à la ligne à ma disposition.
J'ai essayé :
{% for card in cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet" %}| {{ card.fields.contenu }}{% endfor %}
Mais
|
n'est pas interprétéUpdated by Marie Kuntz (absente) 9 months ago
Bon, ça marche avec
{% for item in cards|objects:"thematiques"|filter_by:"thematique"|filter_value:"pouet"|getlist:"contenu" %}{% newline %}| {{ item }} {% endfor %}
mais vraiment, ça n'est pas pratique, ni intuitif, ni facile à utiliser, et si l'on pouvait avoir un
|join:newline
(oublions les mails) ça faciliterait la vie.Updated by Frédéric Péters 9 months ago
|join:newline (oublions les mails) ça faciliterait la vie.
Je vais répéter ici que la manière pour "voir apparaitre un retour à la ligne dans le rendu" dépendra de l'endroit du rendu; cf par exemple capture attachée, une donnée de traitement d'un champ texte, avec des caractères retour à la ligne dedans, mais pas visibles sur le rendu.
Il faudra considérer les endroits au cas par cas, je vais poser maintenant qu'il n'y aura pas de solution universelle basée sur |join, que ce ticket ne peut donc être résolu.
Updated by Marie Kuntz (absente) 9 months ago
mais c'est le même problème pour newline, non ? selon l'endroit où on le pose, il fonctionne, ou pas ; ça n'a pas empêché de le mettre en place.
Updated by Frédéric Péters 9 months ago
mais c'est le même problème pour {% newline %}
Ça a surtout été introduit pour remplacer du n'importe quoi fait avec du Python, ça a peu été réfléchi au-delà.
selon l'endroit où on le pose, il fonctionne, ou pas
Je n'ai pas en tête (ou rapidement trouvé) de tickets où il ait été dit que ça ne fonctionnait pas sur un endroit précis; on aurait certaines possibilités sur le tag {% newline %} de connaitre le contexte.
Là aussi, le contexte précis serait important.
Sur ce ticket, il y a encore moins de contexte maintenant qu'au début, la description était pour l'affichage dans un mail, plus loin il y a "oublions les mails".