用纯Python代码去除生成HTML中的空白字符

11 投票
3 回答
9599 浏览
提问于 2025-04-15 18:30

我正在使用Jinja2来生成HTML文件,这些文件通常非常大。我注意到生成的HTML里面有很多空白部分。有没有什么纯Python的工具可以用来减少这些HTML的大小?我说的“减少”是指去掉HTML中不必要的空白(就像谷歌做的那样——比如查看google.com的源代码)。

我不想依赖像tidy这样的库或外部程序。

为了进一步说明,里面几乎没有JavaScript代码,只有HTML内容。

3 个回答

4

我发现了一个叫做 python slimmer 的库,非常适合你需要做的事情。

from slimmer import html_slimmer # or xhtml_slimmer, css_slimmer
html = html_slimmer(html)
9

你也可以看看Jinja自带的空白控制功能,这可能会减少你在模板渲染后手动去除空白的需求。

引用文档中的内容:

不过你也可以手动在模板中去掉空白。如果你在一个块(比如一个for标签)、注释或变量表达式的开始或结束加上一个减号(-),就可以去掉那个块前后的空白:

{% for item in seq -%}
    {{ item }}
{%- endfor %}

这样做会让所有元素之间没有空白。如果seq是从1到9的数字列表,输出就会是123456789。

-1

如果你只是想去掉多余的空白,可以使用:

>>> import re
>>> html_string = re.sub(r'\s\s+', ' ', html_string)

或者:

>>> html_string = ' '.join(html_string.split())

如果你想做一些比单纯去掉多余空白更复杂的事情,那你就需要用到更强大的工具(或者更复杂的正则表达式)。

撰写回答