我正在使用Mako + Pylons,我注意到HTML输出中有大量的空白。
我该如何摆脱它? Reddit设法做到了。
答案 0 :(得分:8)
有反斜杠的事。
以mako http://makotemplates.org的主页为例。
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>\
% endfor
</tr>
</%def>
但严重的是,我不会花太多时间尝试正确格式化输出。重要的是拥有可读的模板代码。我使用Webkit(或FireBug,如果您愿意)的Web检查器比“查看源代码”更频繁。
如果你真的想要好的格式化html输出,你总是可以写一个中间件来做到这一点。
答案 1 :(得分: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>'
答案 2 :(得分: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或其他任何方式传递)。它不是最有效的方法,但它提供了一个简单的例子:)
答案 3 :(得分:1)
如果您的数据不是太动态,您可以存储模板输出的优化缓存并将其提供给Web客户端。
答案 4 :(得分:0)
与Dan的答案类似,我通过此函数传递渲染输出,该函数仅保留“故意”空白。我将其定义为连续两次(即空行)
所以
Hello
There
成为
Hello There
但是
Hello
There
变为
Hello
There
这是代码
def filter_newline(input):
rendered_output = []
for line in input.split("\n"):
if line:
# Single new-lines are removed
rendered_output.append(line)
else:
# Subsequent newlines (so no body to the interveaning line) are retained
rendered_output.append("\n")
return "".join( rendered_output )
执行如此(我偷走了Dan的一部分)
whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)