Как я могу удалить пробелы и новые строки с помощью шаблонов Mako? Мой HTML-файл 12362 строки убивает IE - PullRequest
3 голосов
/ 03 сентября 2010

Я использую систему шаблонов Mako на своем веб-сайте Pylons, и у меня возникли некоторые проблемы с удалением пробелов.

Мое обоснование для удаления пробелов заключается в том, что сгенерированный HTML-файл представляет собой 12363 строки кода. Я полагаю, именно поэтому Internet Explorer зависает при попытке загрузить его.

Я хочу, чтобы мой HTML-файл выглядел красиво и аккуратно, чтобы я мог с легкостью вносить в него изменения, а сгенерированный вывод выглядел настолько уродливым и грязным, насколько это необходимо для сокращения размера файлов и использования памяти.

В документации Mako http://www.makotemplates.org/docs/filtering.html сказано, что вы можете использовать флаг trim, но это не работает. Пример кода:

<div id="content">
    ${next.body() | trim}
</div>

Единственный способ, которым я смог удалить символы новой строки, это добавить \ (обратную косую черту) в конец каждой строки. Это довольно раздражает при кодировании представлений, и я предпочел бы иметь централизованное решение.

Как удалить пробелы / переводы строки?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2010

Я не верю, что зависание IE связано с размером файла.Вы, вероятно, только что нашли комбинацию разметки, которая попадает в ошибку IE, которая приводит к ее зависанию.Попробуйте обрезать документ до тех пор, пока больше не произойдет замораживание, чтобы изолировать нарушающий фрагмент шаблона разметки (и затем избегать шаблона разметки), или попробуйте изменять разметку, пока это больше не произойдет.будет запускать вашу страницу через валидатор HTML и исправлять все обнаруженные проблемы.

0 голосов
/ 10 декабря 2010

Вы можете создать свое собственное простое промежуточное программное обеспечение WSGI для удаления пробелов из ваших шаблонов после их рендеринга (возможно, с использованием методов, описанных в в этом ответе ).

Ниже приведен быстрыйпример, который может помочь вам начать. Примечание: я написал этот код без тестирования или даже запуска;это может сработать в первый раз, но, вероятно, не подойдет вашим потребностям, поэтому вам нужно расширить это самостоятельно.

class HTMLMinifyMiddleware(object):
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        resp_body = self.app(environ, start_response)

        for i, part in enumerate(resp_body):
            resp_body[i] = ' '.join(part.split())

        return resp_body
0 голосов
/ 27 сентября 2010

Я предполагаю, что фильтр обрезки обрабатывает ваш html как одну строку и удаляет только начальные и конечные пробельные символы. Вы хотите, чтобы он удалял пробелы из каждой строки. Я бы создал фильтр и прошел бы по каждой строке.

<%!
    def better_trim(html):
        clean_html = ''
        for line in html:
            clean_html += line.strip()
        return clean_html
%>

<div id="content">
    ${next.body() | better_trim}
</div>
...