从Mako模板输出中去除空白(Pylons)

7 投票
5 回答
5323 浏览
提问于 2025-04-16 05:03

我正在使用 Mako 和 Pylons,发现我的 HTML 输出中有很多多余的空白。

我该怎么做才能去掉这些空白呢?Reddit 做到了这一点。

5 个回答

4

要做到这一点而不进行后期处理,唯一的方法就是在模板中避免空格。不过,这样会让你作为开发者的工作变得非常困难。

你需要决定一下,在模板渲染后清理HTML字符串所花的时间,是否能节省足够的带宽来抵消这个成本。我建议使用优化过的C语言代码库来帮你完成这个任务,比如lxml.html

>>> from lxml import html
>>> page = html.fromstring("""<html>
... 
... <body>yuck, a newline! bandwidth wasted!</body>
... </html>""")
>>> html.tostring(page)
'<html><body>yuck, a newline! bandwidth wasted!</body></html>'
8

这里有个反斜杠的问题。

你可以看看mako的主页,地址是 http://makotemplates.org,里面有个例子。

<%def name="makerow(row)">
    <tr>
    % for name in row:
        <td>${name}</td>\
    % endfor
    </tr>
</%def>

不过说真的,我建议你不要花太多时间去纠结输出的格式。更重要的是要有易读的模板代码。我自己更常用Webkit的网页检查工具(或者如果你喜欢的话,可以用FireBug),而不是“查看源代码”。

如果你真的想要格式良好的HTML输出,你可以写一个中间件来实现这个功能。

2

我不太确定在Mako里面有没有直接的方法来解决这个问题,但你总是可以在页面展示之前,先处理一下生成的内容。比如说,你有一段代码会产生很多多余的空白:

from mako import TemplateLookup

template_lookup = TemplateLookup(directories=['.'])
template = template_lookup.get_template("index.mako")
whitespace_mess = template.render(somevar="no whitespace here")
return whitespace_mess # Why stop here?

你可以加一个额外的步骤,像这样:

from mako import TemplateLookup

template_lookup = TemplateLookup(directories=['.'])
template = template_lookup.get_template("index.mako")
whitespace_mess = template.render(somevar="no whitespace here")
cleaned_up_output = cleanup_whitespace(whitespace_mess)
return cleaned_up_output

...这里的cleanup_whitespace()是一个函数,用来处理你想要的效果(它可以通过HTML Tidy或者slimmer等工具来处理)。虽然这不是最有效的方法,但作为一个快速的例子还是不错的 :)

撰写回答