Шаблоны Python для огромного HTML / XML - PullRequest
4 голосов
/ 14 мая 2010

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

Таким образом, мне интересно, существуют ли шаблоны Python, которые могут выводить содержимое страницы по частям.

UPD 1 : меня не интересует перечисление всех доступных фреймворков и шаблонизаторов. Меня интересуют шаблонные решения, которые я могу использовать отдельно от любого фреймворка и которые могут выдавать контент по частям, а не создавать весь результат в памяти.

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

Ответы [ 5 ]

5 голосов
/ 19 мая 2010

У большинства популярных шаблонизаторов есть способ генерировать или записывать визуализированный результат в файловые объекты с кусками. Например:

2 голосов
/ 18 мая 2010

Нет проблем с созданием чего-то подобного в памяти. Несколько рядов тысяч далеко не велики.

Для ваших шаблонных потребностей вы можете использовать любой из:

Есть некоторые инструменты , которые позволяют генерировать HTML из этих языков разметки.

2 голосов
/ 14 мая 2010

Было бы удобнее (если у них включен javascript) построить таблицу с помощью javascript, используя, например, плагин JQuery, который позволяет автоматически загружать содержимое, как только вы прокрутите вниз. Затем сначала загружается только несколько строк, и когда пользователь прокручивает вниз, по запросу загружается больше строк.

Если это не решение, вы можете использовать три шаблона: один для всего перед строками, один для всего после строк и третий для строк. Затем вы сначала отправляете шаблон before-row, затем генерируете строки и отправляете их немедленно, затем шаблон after-row. Тогда у вас будет только один блок / строка в памяти вместо всей таблицы.

1 голос
/ 24 мая 2010

Вам не нужен движок потоковых шаблонов - я делаю это все время, и задолго до того, как вы столкнетесь с чем-то неопределенно тяжелым на стороне сервера, браузер начнет задыхаться. Визуализация таблицы 10000 строк приведет к привязке ЦП на несколько секунд практически в любом браузере; прокрутка в Chrome будет мешать, а использование браузера будет расти независимо от браузера.

Что вы можете сделать (и я уже реализовал это, хотя в ретроспективе выясняется, что в этом нет необходимости) - использовать xslt на стороне клиента. Печать инструкции обработки xslt и открывающего и закрывающего тега с использованием строк проста и довольно безопасна; затем вы можете транслировать каждую отдельную строку как отдельный элемент xml, используя любую предпочитаемую технику записи XML.

Однако - вам это действительно не нужно, и, вероятно, никогда не понадобится - если ваш html-генератор станет слишком медленным, браузер будет на порядок более проблематичным.

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

0 голосов
/ 18 мая 2010

Используете ли вы веб-фреймворк для этого? http://www.pylonshq.com включает совместимость с несколькими шаблонизаторами. http://www.djangoproject.com/ У Django есть собственный язык шаблонов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...