如何使用Mako模板删除空格和换行符?我的12362行HTML文件正在杀死IE

时间:2010-09-03 03:48:01

标签: model-view-controller templates pylons mako

我正在Pylons网站上使用Mako模板系统,并且在解决空白时遇到了一些问题。

我剥离空格的原因是生成的HTML文件是12363行代码。我想,这就是Internet Explorer在尝试加载它时挂起的原因。

我希望能够让我的HTML文件看起来漂亮整洁,这样我就可以轻松地对其进行更改,并使生成的输出看起来像减少文件大小和内存使用所需的那样丑陋和杂乱。

Mako文档http://www.makotemplates.org/docs/filtering.html表示您可以使用trim标记,但这似乎不起作用。示例代码:

<div id="content">
    ${next.body() | trim}
</div>

我能够删除换行符的唯一方法是在每行的末尾添加\(反斜杠)。在对视图进行编码时,这很烦人,我更倾向于使用集中式解决方案。

如何删除空格/换行符?

3 个答案:

答案 0 :(得分:0)

我猜测修剪过滤器将你的html视为单个字符串,并且仅剥离前导和尾随空格字符。您希望它从每一行中删除空格。我会创建一个过滤器并迭代每一行。

<%!
    def better_trim(html):
        clean_html = ''
        for line in html:
            clean_html += line.strip()
        return clean_html
%>

<div id="content">
    ${next.body() | better_trim}
</div>

答案 1 :(得分:0)

我不相信IE挂起是由于文件大小。您可能刚刚发现了一个标记组合,它会触及导致其冻结的IE错误。尝试修剪你的文档,直到冻结不再发生以隔离有问题的标记模式(然后避免标记模式),或尝试更改标记,直到不再发生这种情况。

另一件好事是通过HTML验证程序运行您的页面并修复报告的任何问题。

答案 2 :(得分:0)

您可以创建自己的简单WSGI中间件,以便在渲染后从模板中剥离空白(可能使用this answer中描述的方法)。

以下是一个可以帮助您入门的简单示例。 注意:我在没有测试甚至运行它的情况下编写了这段代码;它可能是第一次工作,但它可能不适合您的需求,因此您需要自己进行扩展。

class HTMLMinifyMiddleware(object):
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        resp_body = self.app(environ, start_response)

        for i, part in enumerate(resp_body):
            resp_body[i] = ' '.join(part.split())

        return resp_body