Я использую Mako + Pylons, и я заметил ужасное количество пробелов в моем выходе HTML.Strip whitespace от выхода шаблона Мако (Pylons)
Как я могу избавиться от него? Reddit удается это сделать.
Я использую Mako + Pylons, и я заметил ужасное количество пробелов в моем выходе HTML.Strip whitespace от выхода шаблона Мако (Pylons)
Как я могу избавиться от него? Reddit удается это сделать.
Я не уверен, есть ли способ сделать это в самой Мако, но вы всегда можете просто выполнить обработку после рендеринга, прежде чем подавать страницу. Например, у вас есть следующий код, который генерирует свои ужасающие пропуска:
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 или что-то еще). Это не самый эффективный способ сделать это, но это делает быстрый пример :)
Если ваши данные не слишком динамичны, вы можете сохранить оптимизированный кэш вывода шаблона и обслуживать его для веб-клиентов.
Есть обратная косая черта.
Посмотрите на домашнюю страницу mako http://makotemplates.org для примера.
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>\
% endfor
</tr>
</%def>
Но если серьезно, я бы не потратил много времени на правильное форматирование вывода. Важно иметь читаемый код шаблона. Я использую веб-инспектора Webkit (или FireBug, если вы предпочитаете) чаще, чем «просмотр источника».
Если вам действительно нужен хороший форматированный вывод html, вы всегда можете написать промежуточное программное обеспечение, которое это делает.
http://docs.makotemplates.org/en/latest/syntax.html?highlight=empty#newline-filters –
Единственный способ сделать это без постобработки - избежать пробелов в шаблоне. Однако это будет очень сложно для вас как разработчика.
Вам необходимо принять решение о том, будет ли время для очистки строки 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>'
Подобный ответ Дэна, я прошел обработанную выход через эту функцию, которая только сохраняет «преднамеренный» пробелы. Я определил, что это две результирующие нагрузки в строке (т.е.е пустая строка)
Так
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)
Execute как так (я украл часть примера Дэна)
whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)
Я не понимаю, как это относится к моей проблеме пробелов. Не могли бы вы уточнить? –
Ну, пусть Mako сгенерирует шаблоны, как сейчас. И вместо того, чтобы добавлять сложность последующей обработки каждого запроса (скорее всего, с помощью регулярных выражений), обслуживать кешированную версию страницы после ее обработки. –