我正在使用 Mako + Pylons,我注意到我的 HTML 输出中有大量的空白。
我将如何摆脱它?Reddit 设法做到了。
有反斜杠的东西。
以 mako 的主页http://makotemplates.org为例。
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>\
% endfor
</tr>
</%def>
但说真的,我不会花太多时间尝试正确格式化输出。重要的是要有可读的模板代码。与“查看源代码”相比,我更频繁地使用 Webkit(或 FireBug,如果您愿意)的网络检查器。
如果你真的想要良好的格式化 html 输出,你总是可以编写一个中间件来做到这一点。
在没有后处理的情况下做到这一点的唯一方法是避免模板中的空格。但是,这将使您作为开发人员变得非常困难。
您需要决定在呈现模板后清理 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>'
我不确定是否有办法在 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或slimer或其他方式传递它)。这不是最有效的方法,但它是一个简单的例子:)
如果您的数据不是太动态,您可以存储模板输出的优化缓存并将其提供给 Web 客户端。
与丹的回答类似,我通过这个函数传递了渲染的输出,它只保留了“故意”的空白。我将其定义为连续两个回车(即空行)
所以
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 )
像这样执行(我偷了丹的部分例子)
whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)