最近在用 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,反正过程都是一样的我就懒得重复试了。