空白控制
在实际输出的HTML文件中,模板中的Jinja2语句、表达式和注释会保留移除后的空行。以下面代码为例:
{% if user.bio %}
<i>{{ user.bio }}</i>
{% else %}
<i>This user has not provided a bio.</i>
{% endif %}
Jinja2语句中的HTML代码缩进不是必须的,只是为了增加可读性,在编写大量Jinja2代码时可读性尤其重要。
实际输出的HTML代码如下所示:
<i>{{ user.bio }}</i>
<i>This user has not provided a bio.</i>
如果想在渲染时自动去掉这些空行,可以在定界符内侧添加减号。比如,{% -endfor %}会移除该语句前的空白,同理,在右边的定界符内侧添加减号将移除该语句后的空白:
{% if user.bio -%}
<i>{{ user.bio }}</i>
{% else -%}
<i>This user has not provided a bio.</i>
{%- endif %}
现在输出的HTML代码如下:
<i>{{ user.bio }}</i>
<i>This user has not provided a bio.</i>
除了在模板中使用减号来控制空白外,还可以使用模板环境对象提供的trim_blocks和lstrip_blocks属性设置,前者用来删除Jinja2语句后的第一个空行,后者用来删除Jinja2语句所在行之前的空格和制表符(tabs):
app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True
trim_blocks中的block指的是使用{% ... %}定界符的代码块,与我们前面介绍模板继承中的块无关。
需要注意的是,宏内的空白控制行为不受trim_blocks和lstrip_blocks属性控制,需要手动设置:
{% macro qux(amount=1) %}
{% if amount == 1 -%}
I am qux.
{% elif amount >1 -%}
We are quxs.
{%- endif %}
{% endmacro %}
事实上,我们没有必要严格控制HTML输出,因为多余的空白并不 影响浏览器的解析。在部署时,我们甚至可以使用工具来去除HTML响 应中所有的空白、空行和换行,这样可以减小文件体积,提高数据传输 速度。所以,编写模板时应以可读性为先,在后面的示例程序中,我们 将不再添加空白控制的代码,并且对Jinja2语句中的HTML代码进行必 要的缩进来增加可读性。
0 Comments latest
No comments.