从Mako模板输出中去除空白(Pylons)
我正在使用 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等工具来处理)。虽然这不是最有效的方法,但作为一个快速的例子还是不错的 :)