[PYTHON] [Jinja2] Changement de saut de ligne en fonction de la position du trait d'union

introduction

Python: 3.7.4 jinja2: 2.7.2

Lors de l'écriture d'une instruction for / if avec le modèle jinja2, la manière des sauts de ligne change en fonction de la présence ou de l'absence de tirets et de la position. Je me perds toujours en écrivant une déclaration for, donc je vais la résumer. Comment écrire pour obtenir la sortie suivante?

production


start

apple0
orange0

apple1
orange1

end

Modèle 1: mettre des traits d'union dans tout

Le modèle suivant sera la norme pour cette fois. Placez des tirets avant et après la position de début et la position de fin de l'instruction for.

jinja_test1.j2


start
{%- for i in range(2) -%}
apple{{ i }}
orange{{ i }}
{%- endfor -%}
end

Modèle 1: résultat de l'exécution

Il y a un saut de ligne uniquement entre la pomme et l'orange. Il semble que le contenu écrit dans l'instruction for rompra la ligne sans autorisation.

production


startapple0
orange0apple1
orange1end

Motif 2: effacez le trait d'union avant la position de début de l'instruction for

jinja_test2.j2


start
{% for i in range(2) -%}
apple{{ i }}
orange{{ i }}
{%- endfor -%}
end

Modèle 2: résultat de l'exécution

Il y a eu une pause entre start et apple0. Avant la position de début de l'instruction for, un saut de ligne se produit une seule fois au début de l'instruction for.

production


start
apple0
orange0apple1
orange1end

Motif 3: effacez le trait d'union après la position de début de l'instruction for

jinja_test3.j2


start
{%- for i in range(2) %}
apple{{ i }}
orange{{ i }}
{%- endfor -%}
end

Modèle 3: résultat de l'exécution

Il y a un saut de ligne avant apple0 et apple1. Après la position de début de l'instruction for, un saut de ligne se produit à chaque fois à la position de départ dans l'instruction for.

production


start
apple0
orange0
apple1
orange1end

Motif 4: effacez le trait d'union avant la position de fin de la phrase for

jinja_test4.j2


start
{%- for i in range(2) -%}
apple{{ i }}
orange{{ i }}
{% endfor -%}
end

Modèle 4: résultat de l'exécution

Il y a maintenant un saut de ligne après orange0 et orange1. Avant la position de fin de l'instruction for, un saut de ligne se produit à chaque fois sur la dernière ligne de l'instruction for.

production


startapple0
orange0
apple1
orange1
end

Motif 5: effacez le trait d'union après la position de fin de l'instruction for

jinja_test5.j2


start
{%- for i in range(2) -%}
apple{{ i }}
orange{{ i }}
{%- endfor %}
end

Modèle 5: résultat de l'exécution

Un saut de ligne est maintenant inséré après orange1. Après la position de fin de l'instruction for, il semble que la ligne ne saute qu'une seule fois en quittant l'instruction for.

production


startapple0
orange0apple1
orange1
end

Résumé

Sur la base du contenu jusqu'à présent, c'est comme suit.

Position pour effacer les traits d'union Comment casser une ligne
Avant la position de départ de l'instruction for Une seule pause au début de l'instruction for
derrière la position de départ de l'instruction for Pause à chaque fois au début de la boucle
Avant la position de fin de l'instruction for Pause à chaque fois à la fin de la boucle
derrière la position finale de l'instruction for Une seule pause à la fin de l'instruction for

Autrement dit, pour obtenir la première sortie ・ Deux sauts de ligne entre start et apple0 → Pas besoin de tirets avant et après la position de début de l'instruction for ・ Il est nécessaire de couper deux fois la ligne entre orange1 et la fin. → Pas besoin de tirets avant et après la position de fin de la phrase for Donc, "Effacer tous les traits d'union" est la bonne réponse, et c'est comme suit.

jinja_test6.j2


start
{% for i in range(2) %}
apple{{ i }}
orange{{ i }}
{% endfor %}
end

production


start

apple0
orange0

apple1
orange1

end

Recommended Posts

[Jinja2] Changement de saut de ligne en fonction de la position du trait d'union
Rendez-le visible en coupant la ligne coupée par journalctrl
Différence de résultats en fonction de l'argument du multiprocessus.
rsync Le comportement change en fonction de la présence ou de l'absence de la barre oblique de la source de copie
[Introduction] Insérer des sauts de ligne dans Python 3
Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande
Lisez le fichier avec python et supprimez les sauts de ligne [Notes sur la lecture du fichier]
Continuez à recevoir RSS sur la ligne de commande
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Retour sur 2016 dans le langage Crystal
Modifier l'emplacement du saut de ligne de la sortie formatée automatiquement iPython
Vous recherchez commandlinefu sur la ligne de commande
[Python] Lire la ligne spécifiée dans le fichier
[Linux] Différence d'informations temporelles en fonction de l'ID d'horloge de la fonction clock_gettime ()
Comment la référence du tableau python change en fonction de la présence ou de l'absence d'indices
Si branche en fonction de l'existence ou non d'un élément spécifique dans la liste
En Python, changez le comportement de la méthode en fonction de la façon dont elle est appelée