12

I am using django templating, and for readability I have html that looks similar to the following:

{% if some_variable %}
    text
{% else %}
    nothing exists here
{% endif %}

{% for item in set %}
    {% if forloop.first %}
...etc...

It converts to the following html at runtime, which includes tons of whitespace and returns:

text

<div>

  <li

        class='some_class

    >

    some text

   </li>

</div>

etc...

Some pages even run to ~3,000 lines of html when viewing the page source.

Is there a tool to compress this html at runtime? What about a tool to remove extra line breaks?

4

7 回答 7

6

对于一些背景知识,这是有意完成的,因为 Django 的模板引擎目前并不关心在标签被剥离后评估为空白的行的清理,这样做会在响应响应时产生一些轻微的性能损失,因为它涉及评估渲染模板的全部内容的后处理步骤。

不过,如果您需要一个快速的解决方案,我建议您使用StripWhitespaceMiddleware响应中间件,该中间件将从文本响应中删除虚假空格。它非常快速和直接,使用像模板引擎本身一样的正则表达式匹配。如果您真的关心仍在阅读原始响应的穷人,那么一个更繁重但功能强大的替代方案是部署一个使用 HTML 美化器的响应中间件。

于 2012-07-29T22:47:56.097 回答
4

django-htmlmin包非常棒,它提供了很多控制和功能,而且它支持 HTML 5。

于 2014-10-02T13:37:20.553 回答
2

环顾四周,我刚刚找到了 django-pipeline,我刚刚尝试了中间件,这正是我所期望的。它会缩小所有 html 和文本节点并保持 javascript 节点不变。

中间件实现和基本测试结果大约需要 4 分钟,只需在 gzip 中间件或 MIDDLEWARE_CLASSES 设置之后 pip install 并激活中间件。

https://github.com/cyberdelia/django-pipeline

http://django-pipeline.readthedocs.org/en/latest/

于 2013-02-07T22:01:56.730 回答
2

grunt-contrib-htmlmin我认为在将 Django 模板文件部署到生产服务器之前,应该使用前端开发工具,例如.

这样,缩小过程发生在“构建时”,并在“运行时”中为 HTML 缩小节省服务器 CPU 资源。

这个工具最初是为缩小 HTML 而设计的,但也适用于我尝试过的 Django 模板。

于 2014-03-24T01:17:30.807 回答
1

如果您使用 Nginx,它的 Strip 模块在为您清理 html 方面做得非常好。它是实时且透明的。正确设置后,您根本不需要关心。

http://wiki.nginx.org/HttpStripModule

于 2012-07-30T09:49:24.107 回答
1

“我认为在将 Django 模板文件部署到生产服务器之前,应该使用前端开发工具,例如 grunt-contrib-htmlmin 来缩小它们。”

前段时间我需要这样做以提高性能并减少延迟。我编写了一个模板最小化器,它将预先最小化模板中的 HTML、CSS 和 Javascript,从而使页面的组成最小化。它作为 Django 命令集成到 Django 中,理解 Django 诱人语言的复杂性,并且是可扩展的。您可以在 pypi 上的以下链接中找到它:

django-template-minimizer

于 2016-01-05T02:56:56.520 回答
0

我建议使用自定义模板加载器django-spaceless-templates,它会去除不必要的空白字符。这种方法有两个优点:

  • 结合缓存模板加载器,在模板编译期间只进行一次空白剥离。另一方面,每次渲染模板时都会调用 {% spaceless %} 或中间件方法缩小。
  • 空格剥离可能更激进——删除 HTML 标记、Django 标记和变量之间的空格。
于 2021-06-19T21:21:56.140 回答