Pythonのjinja2を使ったテンプレートで生成したHTMLソースを見ると、無駄な改行が多くてソースを解析するのに困ったことはありませんか?
それはjinja2の「{% … %}」部分が空行として出力されてしまうからです。
これを制御すると無駄のないすっきりしたHTMLソースになります。
jinja2で出力される無駄な改行を削除する
jinja2で出力される無駄な改行を削除するには「{% … %}」を「{%- … %}」としてやることでその行を空白として出力されることがなくなります。
まずは、Pythonのソースから。
from flask import Flask from flask import render_template app = Flask( __name__ ) @app.route( "/", methods=[ "POST", "GET" ]) def test_main_py(): return render_template( "main.html" ) if __name__ == '__main__': app.run( debug=True, host="0.0.0.0", port=8888, threaded=True )
まずは「{% … %}」をなにも制御せずに実行してみます。
<!doctype html> <html> <head> <title>jinja2Test</title> </head> <body> {% for cnt in range( 10 ) %} {% if cnt == 1 %} <p>cntは{{ cnt }}です。</p> {% elif cnt == 2 %} <p>cntは{{ cnt }}です。</p> {% elif cnt == 3 %} <p>cntは{{ cnt }}です。</p> {% else %} <p>cntは{{ cnt }}です。</p> {% endif %} {% endfor %} </body> </html>
無駄なロジックですが、jinja2が出力した空行を見たいだけなので、ご了承を。
出力されたHTMLは
<!doctype html> <html> <head> <title>jinja2Test</title> </head> <body> <p>cntは0です。</p> <p>cntは1です。</p> <p>cntは2です。</p> <p>cntは3です。</p> <p>cntは4です。</p> <p>cntは5です。</p> <p>cntは6です。</p> <p>cntは7です。</p> <p>cntは8です。</p> <p>cntは9です。</p> </body> </html>
となり、「{% … %}」の行が空行として出力されていますね。
次に「{%- … %}」で改行を制御してみます
<!doctype html> <html> <head> <title>jinja2Test</title> </head> <body> {%- for cnt in range( 10 ) %} {% if cnt == 1 %} <p>cntは{{ cnt }}です。</p> {%- elif cnt == 2 %} <p>cntは{{ cnt }}です。</p> {%- elif cnt == 3 %} <p>cntは{{ cnt }}です。</p> {%- else %} <p>cntは{{ cnt }}です。</p> {%- endif %} {%- endfor %} </body> </html>
改行を制御したHTMLソースは
<!doctype html> <html> <head> <title>jinja2Test</title> </head> <body> <p>cntは0です。</p> <p>cntは1です。</p> <p>cntは2です。</p> <p>cntは3です。</p> <p>cntは4です。</p> <p>cntは5です。</p> <p>cntは6です。</p> <p>cntは7です。</p> <p>cntは8です。</p> <p>cntは9です。</p> </body> </html>
と「{%- … %}」の行が空行として出力されていません。
まとめ
jinja2で出力される無駄な改行を削除するには「{% … %}」を「{%- … %}」としてやることでその行を空白として出力されることがなくなります。
以上、Pythonのjinja2で出力される無駄な改行を削除する方法でした。