使用python jinja2 Template的时候,在控制块(比如一个 for 标签、一段注释或变 量表达式)的开始或结束放置一个减号( - ),可以移除块前或块后的空白。
但用的时候总是会多出或缺失回车,所以做了些测试记录一下。
>>> from jinja2 import Template
>>> tmpstr = '''---------
... {% for item in seq %} # 回车
... {{ item }} # 回车
... {% endfor %} # 回车
... -------------
... '''
>>> llll = [12345]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
---------
# 产生三个回车
12345
-------------
>>> tmpstr = '''---------
... {% for item in seq %} # 每次循环产生一个回车,2
... {{ item }} # seq有两个元素,每个元素自己产生一个回车,2
... {% endfor %} # 但end只会产生一个回车,1
... -------------
... '''
>>> llll = [12345, 6789]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
---------
12345
6789
-------------
在 for 和 endfor的后面加 "-",可以看到回车正常了,但item前面的空格也没了,说明for后面的"-"其消除了不止本行回车,还有下一行的空格。
>>> tmpstr = '''-------------
... {% for item in seq -%}
... {{ item }}
... {% endfor -%}
... -------------
... '''
>>> llll = [12345, 6789]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
-------------
12345
6789
-------------
在 endfor 前面加'-'(endfor 大括号前面有空格),可以看到 item后面的回车和endfor前面的回车都没了。其消除了endfor之前的所有空格和回车。
>>> tmpstr = '''-------------
... {% for item in seq -%}
... {{ item }}
... {%- endfor %} ## endfor 前面有空格
... -------------
... '''
>>> llll = [1234, 5678]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
-------------
12345678
-------------
不输出item,可以看到endfor 前面的"-"消除了其和for之间的所有空格和回车。
>>> tmpstr = '''-------------
... {% for item in seq %} ## 前面2个空格,后面有4个空格+1个回车
... {%- endfor %} ## 前面4个空格
... -------------
... '''
>>> llll = [1234, 5678]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
-------------
-------------
>>>
下面这两组测试说明,没轮循环运行的是 for 和endfor的后大括号和前大括号之间所有语句。
第一个测试例:
第一次循环,8 * 空格(for前面) + (消除for行回车+消除item行空格的)item + 回车(item行)+2空格(endfor前面)。
第二次循环,(消除for行回车+消除item行空格的)item+ 回车(item行)+2空格(endfor前面)。
总的就是。
第二个测试例类似。
>>> tmpstr = '''-------------
... {% for item in seq -%}
... {{ item }} # 前面2 * " '"
... {% endfor -%} # 前面2 * " '"
... -------------
... '''
>>> llll = [1234, 5678]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
-------------
1234
5678
-------------
>>> tmpstr = '''-------------
... {% for item in seq -%}
... {{ item }}
... {% endfor -%}
... -------------
... '''
>>> llll = [1234, 5678]
>>> tmp = Template(tmpstr)
>>> conf = tmp.render(seq=llll)
>>> print conf
-------------
1234
5678
-------------