最近在用 Jinja2 构建模板的时候发现 Jinja2 有个很奇怪的地方,他渲染完{% block header %}之类的标签后,你会在 html 页面里找到一个空行,有没有什么办法避免一些不必要的空行呢?

翻了点资料,Jinja2 的文档里有一个Whitespace Control,里面说到的就是这一点,按文档讲,trim_blocks选项是将模板标签后第一个空行自动删去;还有一个类似的选项是lstrip_blocks,他是将模板标签前的制表符或者空格自动删去(当然如果之前有其他字符的话就不会删去惹……)。

看来挺简单的吧,单独使用 Jinja2 的时候可以这么做:

from jinja2 import Environment
env = Environment(trim_blocks=True)

然后使用这个 env 去渲染模板。

但是 Flask 自己已经集成了 Jinja2 了啊,怎么修改 Jinja2 的配置呢?我找到了这个link

app = Flask(__name__) 
app.jinja_env.trim_blocks = True 
app.jinja_env.lstrip_blocks = True

之后渲染出来的结果就没有那么多空行了(好吧其实还是会有很多的,因为貌似一个{% for macro in macros %}就会有两个空行)……

之后还在 github 找到了这个repository,目的是为了直接压缩渲染后的 html,怎么整个到 Flask 里呢?

首先把jinja2htmlcompress.py放到你 app 目所能及的的地方,然后的代码就像下面这样:

from jinja2htmlcompress import HTMLCompress
from flask import Flask 

app = Flask(__name__) 
app.jinja_env.add_extension(HTMLCompress)

之后渲染出来的页面真是……不要太瘦哦~

缺点是这个项目貌似好久没更新了,几个 issue 都没处理,我看了下渲染出来的页面还是有问题的,不过看了下代码并不复杂,有空把坑都填填看……

当然还有的选择是用另一个jinja2compact反正过程都是一样的我就懒得重复试了