【问题标题】:Strip whitespace in generated HTML using pure Python code使用纯 Python 代码去除生成的 HTML 中的空格
【发布时间】:2013-06-01 10:46:08
【问题描述】:

我正在使用 Jinja2 生成通常非常大的 HTML 文件。我注意到生成的 HTML 有很多空格。有没有可以用来最小化这个 HTML 的纯 Python 工具?当我说“最小化”时,我的意思是从 HTML 中删除不必要的空格(就像 Google 所做的那样——例如,查看 google.com 的源代码)

我不想为此依赖库/外部可执行文件,例如 tidy。

为了进一步说明,实际上没有 JavaScript 代码。仅 HTML 内容。

【问题讨论】:

  • 您是只是想删除不必要的空格还是要寻找更多内容?您的标题仅建议空格,但从您的问题来看,您似乎正在寻找更完整的工具。
  • @Mark:我相信,仅删除空格就足够了。 (还有什么比这更重要的吗?)

标签: python html whitespace strip jinja2


【解决方案1】:

您还可以调查Jinja's built-in whitespace control,这可能会减轻在渲染模板后手动删除空格的一些需要。

引用the docs:

但您也可以手动去除模板中的空白。如果您将减号 (-) 放在块的开头或结尾(例如 for 标记)、注释或变量表达式,您可以删除该块之后或之前的空格:

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

这将产生所有元素之间没有空格。如果 seq 是从 1 到 9 的数字列表,则输出将为 123456789。

【讨论】:

  • 但这仅处理块之间的空白——而不是块内或非块内容(如手写段落)
【解决方案2】:

我找到了python slimmer 库,非常适合您需要做的事情。

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

【讨论】:

    【解决方案3】:

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

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

    或:

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

    如果您想做一些比去除多余空格更复杂的事情,您需要使用更强大的工具(或更复杂的正则表达式)。

    【讨论】:

    • 这样,您还将去除文本中单词之间的空格,例如段落和标签属性,并使 HTML 无效
    • 它也在破坏
       元素的内容。
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多