jinja2でのホワイトスペース
jinja2を使っているとコードの前後に改行が自動で挿入されてしまうことへの対処方法
ソースコード
python
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('./template', encoding='utf8'))
tpl = env.get_template('test.html.j2')
users=[
{'name': 'taro'},
{'name': 'jiro'},
{'name': 'sabu'},
]
html = tpl.render({'users':users})
print(html)
template
<body>
<!-- ここから始まる -->
{% if users %}
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
{% endif %}
<!-- ここで終わる -->
</body>
出力結果
<body>
<!-- ここから始まる -->
<ul>
<li>taro</li>
<li>jiro</li>
<li>sabu</li>
</ul>
<!-- ここで終わる -->
</body>
テンプレートの前後にハイフンを入れる
無用な改行を消すために、テンプレートのコードの%の前後にハイフン “-“ を追加します。
<body>
<!-- ここから始まる -->
{% if users -%}
<ul>
{% for user in users -%}
<li>{{ user.name }}</li>
{% endfor -%}
</ul>
{% endif -%}
<!-- ここで終わる -->
</body>
こうすると出力がこうなる。
<body>
<!-- ここから始まる -->
<ul>
<li>taro</li>
<li>jiro</li>
<li>sabu</li>
</ul>
<!-- ここで終わる -->
</body>
jinjaは演算子とかの前後の改行をすべて表示しちゃうので、消したい方の%の隣にハイフンを置くと良い。全部にハイフンを付けちゃうと出力が1行になってしまう。環境設定でなんとかする方法もあるっぽい。