White space jinja2

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行になってしまう。環境設定でなんとかする方法もあるっぽい。

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

Jp, Tokyo https://connvoi.com