LoginSignup
14
6

More than 3 years have passed since last update.

【jinja2】ハイフンの位置による改行の変化

Last updated at Posted at 2019-12-23

はじめに

<バージョン>
Python: 3.7.4
jinja2: 2.7.2

jinja2テンプレートでfor/if文を書く際に、ハイフンの有無や位置で改行のされ方が変わります。
for文を書くときにいつも迷うのでまとめます。
以下の出力を得るにはどう書けばよいのでしょう?

出力
start

apple0
orange0

apple1
orange1

end

パターン1:全てにハイフンを入れる

以下のテンプレートが今回の基準になります。
for文の開始位置、終了位置の前後それぞれにハイフンを入れます

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

パターン1:実行結果

appleとorangeの間だけ改行が入ります。
for文の中に書いてある内容は勝手に改行してくれるようです。

出力
startapple0
orange0apple1
orange1end

パターン2:for文開始位置の手前のハイフンを消す

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

パターン2:実行結果

startとapple0の間が改行されました。
for文開始位置の手前は、for文の開始時に1回だけ改行します。

出力
start
apple0
orange0apple1
orange1end

パターン3:for文開始位置の後ろのハイフンを消す

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

パターン3:実行結果

apple0とapple1の手前に改行が入りました。
for文開始位置の後ろは、for文内の開始位置で毎回改行します。

出力
start
apple0
orange0
apple1
orange1end

パターン4:for文終了位置の手前のハイフンを消す

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

パターン4:実行結果

orange0とorange1の後ろに改行が入るようになりました。
for文終了位置の手前は、for文内の最終行で毎回改行します。

出力
startapple0
orange0
apple1
orange1
end

パターン5:for文終了位置の後ろのハイフンを消す

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

パターン5:実行結果

orange1の後ろに改行が入るようになりました。
for文終了位置の後ろは、for文を出るときに1回だけ改行するようです。

出力
startapple0
orange0apple1
orange1
end

まとめ

今までの内容を踏まえると以下のようになります。

ハイフンを消す位置 改行の仕方
for文開始位置の手前 for文開始時に1回だけ改行
for文開始位置の後ろ ループの先頭で毎回改行
for文終了位置の手前 ループの末端で毎回改行
for文終了位置の後ろ for文終了時に1回だけ改行

つまり、最初の出力を得るには、
・startとapple0の間で2回改行している
 →for文開始位置の前後のハイフンは不要
・orange1とendの間で2回改行する必要がある
 →for文終了位置の前後のハイフンは不要
ということで、「全てのハイフンを消す」が正解となり、以下のようになります。

jinja_test6.j2
start
{% for i in range(2) %}
apple{{ i }}
orange{{ i }}
{% endfor %}
end
出力
start

apple0
orange0

apple1
orange1

end
14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6