Меню

Генератор html кода python



Чем генерировать статический html используя python?

Есть страницы типа:

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

Есть еще варианты использовать BeautifulSoup или даже элементарный replace.

А какие есть еще варианты для генерируемой статики?

PHP возьми, там из коробки всё. Зачем пистон с какими-то костылями?

str.format? Зачем, теперь же f-строки.

Они только с 3.6.

И как ты сделаешь templates[template].format(**data) ?

PHP через subprocess.

В идеальной ситуации, когда нужно именно это — так и сделаю. В ситуации ТСа, как я ее себе вижу — либо никак, если не это надо, либо через mako или другой template engine.

Хороший шаблонизатор понимает, куда выводит сгенерированный текст, и экранирует в соответствии с контекстом. Сможет ли так str.format()?

Хороший шаблонизатор понимает, куда выводит сгенерированный текст,

Покажи мне его, я его джва года жду.

django, но там база данных, которая нафик не нужна

не нужна — не используй, в чём проблема?

я правильно понял, тебе нужно один раз из шаблонов сгенерить html-файлы и после этого исключить любую server-side динамику с этих страниц? Тогда тебе не нужны никакие фреймворки типа джанго или фласка (и что там ещё выше советовали). Таких генераторов полно, гугли их.

В ситуации ТСа, как я ее себе вижу — либо никак, если не это надо, либо через mako или другой template engine.

Так а чем формат не устраивает? Зачем тащить зависимости для такой фигни. Я через формат генерирую скрипты\докерфайлы и все ок.

Источник

Генерация HTML и JSON при помощи prettytable в Python.

Генерация HTML и JSON из табличных данных.

Отображение табличных данных в JSON формате.

Модуль prettytable позволяет печатать табличные данные в виде JSON. Как и в форме ASCII, можно получить строковое представление, для этого необходимо просто использовать метод PrettyTable.get_json_string() .

Отображение таблицы в формате HTML.

Модуль prettytable также может печатать табличные данные в форме HTML. Строковое представление сгенерированной HTML разметки можно получить, просто использовав специальный метод PrettyTable.get_html_string() . Метод PrettyTable.get_html_string() поддерживает такие же аргументы управления выводом таблицы как и метод PrettyTable.get_string() : fields , start , end , sortby и reversesort .

Стилизация HTML-таблиц.

По умолчанию экземпляр PrettyTable() выводит «ванильный» HTML для полученной таблицы. Код HTML довольно прост:

Модуль позволяет передать HTML разметке параметры стиля CSS. Это делается путем передачи ключевого аргумента format=True методу PrettyTable.get_html_string() . Обратите внимание, что-бы всегда печатать форматированный HTML, то необходимо передать True атрибуту экземпляра класса PrettyTable() : mytable.format = True и настройка будет действовать, пока ее не отключить.

Если необходимо изменить стиль таблицы только для одного вызова PrettyTable.get_html_string() , то можно передать параметры стиля для ключевого аргумента attributes для этого метода.

Аргумент attributes представляет собой словарь имя/значение атрибутов для HTML разметки таблицы, что позволяет указать имя, идентификатор и класс, которые можно использовать для настройки внешнего вида с помощью CSS. Например:

Источник

HTML-генератор Python

Я ищу легко реализуемый генератор HTML для Python. Я нашел это

но нет способа добавить элементы css (id, class) для таблицы.

9 ответов

Если вам нужна программная генерация, а не создание шаблонов, модуль HTMLTags Карригелла является одной из возможностей; это может включать, например, атрибут class (который был бы зарезервированным словом в Python) с помощью трюка с верхним регистром его начального значения, т. е. путем цитирования URL документа, который я только что дал:

Атрибуты с тем же именем, что и Ключевые слова Python (класс, тип) должны быть с большой буквы:

Генерация HTML обычно выполняется с одним из бесконечного количества языков шаблонов HTML, доступных для Python. Лично мне нравится Templess , но Genshi , вероятно, является самым популярным. Их бесконечно много, есть список , который, скорее всего, будет неполным.

В противном случае вы можете использовать lxml , где вы можете сгенерировать его более программно в формате XML. Хотя мне трудно увидеть выгоду.

Читайте также:  В структурную схему электрокардиографа входит генератор

Это почтенный HTMLGen Робина Фридриха, который трудно найти, но он все еще доступен здесь (датировано 2001 годом, но HTML с тех пор не сильно изменился ;-). Также есть xist . Конечно, в наши дни генерация HTML, как указывает Леннарт, в целом лучше выполнять с использованием систем шаблонов, таких как Jinja или Мако .

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

И быстрый пример

Dominate — это библиотека создания HTML-кода, которая позволяет легко создавать теги. В доминировании зарезервированные слова Python имеют префикс подчеркивания, поэтому это будет выглядеть так:

Отказ от ответственности: я автор доминирования

Хорошо, вот еще один генератор HTML, или я предпочитаю думать о нем как о компиляторе.

Это набор базовых классов, которые можно использовать для определения тегов и атрибутов. Таким образом, у класса тега есть атрибуты и дочерние элементы. Сами потомки сами являются классами тегов, которые имеют атрибуты, потомки и т. Д. И т. Д. Также вы можете установить параметры, которые начинаются с вашего корневого класса и обрабатывают различные ветви.

Это позволит вам определить все классы тегов, которые вы хотите, таким образом, вы сможете создавать собственные классы и реализовывать любые теги или атрибуты, которые вы хотите.

Только начал с этого, так что если кто-то захочет проверить:)

На самом деле вы можете добавить любой атрибут, такой как id и класс, к объектам в HTML.py ( http: //www.decalage.info/python/html ).

attribs — это необязательный параметр классов Table, TableRow и TableCell. Это словарь дополнительных атрибутов, которые вы хотели бы установить. Например, следующий код устанавливает id и класс для таблицы:

Один и тот же параметр можно использовать с объектами TableRow и TableCell для форматирования строк и ячеек. Он еще не существует для столбцов, но при необходимости его легко реализовать.

Возможно, вас заинтересуют некоторые реализации Python HAML. HAML походит на сокращение HTML и изучает только несколько минут. Также есть версия CSS под названием SASS.

Я использую HAML в максимально возможной степени, когда я программирую на Ruby. И, как сноска, была также работа по созданию модулей для Perl, которые работают с хорошим MVC Mojolicious:

Генерация HTML или любое текстовое поколение, jinja — мощный механизм шаблонов.

Источник

Генерация кода на Python при помощи Hy

1. Что такое Hy

Hy — диалект Лиспа, который встроен в питон.

Благодаря тому, что Hy трансформирует свой Лиспоподобный код в Абстрактное Синтаксическое Дерево (AST) питона, с помощью Hy весь прекрасный мир питона — на кончиках пальцев и в форме Лиспа.

2. О синтаксисе Hy, очень кратко

Hy — своеобразный язык, похожий на каждого из своих родителей (больше, конечно, на Лисп). Для тех, кто не знаком с синтаксисом Лиспа, его можно в данном случае суммировать так.

  1. Отступ не играет роли. Вместо этого — уровни вложенности в выражения из круглых скобочек.
  2. Во всех вызовах функций название функции попадает в скобки со списком аргументов на первое место; запятые в списке аргументов не используются.
  3. Все операторы записываются так, как будто они — функции.
  4. Двоеточия не используются.
  5. Литералы для строк и словарей работают как и раньше; строки записываются в двойных кавычках, кортежи выглядят как вызов функции «,».

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

3. Терминологические замечания

Следует отдельно оговорить используемую терминологию. Основные термины на английском — quoting, unquoting, quaziquoting, splicing, macro expansion. В переводе книги Practical Common Lisp на русский язык для них используются слова «цитирование», «расцитирование», «квазицитирование» — и для последнего из них — «раскрытие макросов». Я не считаю этот вариант перевода удобным.

В данном материале будут использованы в качестве переводов «скрытие» для quoting, «раскрытие» для unquoting, «квазискрытие» для quaziquoting, «структурное раскрытие» для splicing, «расширение макроса» для macro expansion.

Читайте также:  Эми генератор что это

В приведённых далее примерах кода, можно увидеть синтаксис этих операций:

  • ‘ :: скрытие; применяется к последующей форме Hy; вместо её выполнения она будет обработанакак как данные.
  • ` :: квазискрытие; более сложная форма скрытия, позволяющая строить более сложные синтаксические структуры.

:: раскрытие; так как , занята в питоне для конструктора кортежей, используемый символ отличается от традиционной для Лиспа запятой. Употребляется в квазискрытой форме и помещает в неё результат выполнения следующей за ней формы.

@ :: структурное раскрытие; работает аналогично предыдущей операции со следующим различием: результат оценки формы должен быть списком, и его элементы помещаются в объемлющую квазискрытую форму.

Выполнение обозначает вызов функции если форма — список, и доступ к значению символа в противном случае; литералы при выполнении остаются сами собой.

4. Суть метода

Получить конструкцию из hy как объект, с которым можно проводить манипуляции, можно при помощи скрытия. Расширение макросов само по себе не поможет — потому что макрорасширенный код сразу выполняется. Для того чтобы даже просто проинспектировать его расширение без скрытия не обойтись, например:

Поэтому можно сразу сосредоточиться на получении конструкций — например, генерируя их функциями на каких-то входных данных.

Тут нас ожидает несколько сложностей, о которых нельзя забывать.

  1. Скрытая конструкция сама по себе не обязана быть синтаксически корректной для самого hy . В нашем случае корректность необходима.
  2. Не все корректные конструкции hy могут быть транслированы в корректный код на питоне. В частности, это относится к именам переменных — правила на имена символов в hy гораздо расслабленнее.

При наличии грамотно сгенерированной кодовой конструкции в какой-либо переменной (например: результат вызова генерирующей функции), получить код на питоне можно, например, так:

5. Генерация имён

При генерации кода на питоне, в отличие, например, от написания макросов, для нас является важным, какие названия носят новые символы, т.е. в случае питона — имена вновь сгенерированных функций, классов, переменных. Другими словами, стандартный способ в Лиспе ( (gensym) ) нам не подходит. Также в hy нет стандартного для многих лиспов (intern) , служащего для превращения произвольной строки (с поправкой на ограничения по грамматике) в символ.

К счастью, вся база кода hy доступна, и быстрым поиском мы убеждаемся, что (gensym) работает, создавая объекты HySymbol . Так же можем поступить и мы.

Следующий пример, несмотря на сказанное ранее — макрос.

Помимо генерации названия переменной, в нём есть ещё одна полезная деталь. Это — сбор результирующего AST из фрагментов путёи составления списка этих фрагментов, а затем раскрытия этого списка в нужном обрамлении.

6. Пример и замечания

При использовании hy для кодогенерации (в отличие от просто работы на нём), всплывают некоторые аспекты, которые при отправке кода на выполнение оказываются скрытыми.

В первую очередь это касается того, что в контексте AST и контексте выполнения одни и те же выражения обозначают разные вещи.

  • [ ] не просто список питона, а HyList ;
  • < >открывает не словарь питона, а HyDict , и в внутренней модели hy представлен как список;
  • «» не просто строковая переменная, а HyString.

и так далее. Основной вывод который можно из этого сделать таков: перечисленные (и другие) конструкции, будучи скрытыми, при дизассемблировании будут корректно преобразованы в соответствующие литералы python .

Для того, чтобы статически заполнить списки или словари в коде python , потребуется использование операции структурного раскрытия.

В приведённом примере производится заполнение списков в полях alternate_factions и army-factions объявляемого класса. Отметим, что в питоновском коде оба этих поля будут через нижнее подчёркивание. Заполнение производится на основе списков строк, поэтому применяется структурное раскрытие результата преобразования находящихся в переменных строк python в HyString .

Из приведённого фрагмента кода на hy можно сгенерировать следующий фрагмент кода на питоне:

Отдельно хотелось бы отметить как описан вызов конструктора родительского класса.

  • Для функций из класса (которые начинаются на . ), apply трактует первый позиционный аргумент, ему предоставленный (первый элемент списка, являющегося его вторым параметром) как объект, метод которого вызывается;
  • Можно производить заполнение словаря именованных аргументов при помощи структурного раскрытия;
  • Для сопоставления каждому ключу (строке, преобразованной в HyString ) значения, применяется interleave , которое производит итерацию по двум спискам, перемежая их элементы;
  • Символ True подверженный скрытию, в коде python будет преобразован в себя;
  • В скрытой конструкции можно использовать нигде не объявленные (свободные) символы, которые будут преобразованы в переменные с такими же именами. Отметим; хоть в скрытой конструкции и находится объявление символа parent как параметра метода класса, во время выполнения функции, возвращающей скрытую кодовую конструкцию, такого символа не существует;
  • Можно генерировать серии однотипных операций из списков, производя структурное раскрытие списка скрытых конструкций hy (полученных преобразованием из исходного списка).

7. Использованные материалы

При написании данной статьи были использованы материалы из документации Hy и русского перевода Practical Common Lisp.

Источник

python html generator

I am looking for an easily implemented html generator for python. I found this one

but there is no way to add css elements (id, class) for table.

9 Answers 9

If you want programmatic generation rather than templating, Karrigell’s HTMLTags module is one possibility; it can include e.g. the class attribute (which would be a reserved word in Python) by the trick of uppercasing its initial, i.e., quoting the doc URL I just gave:

Attributes with the same name as Python keywords (class, type) must be capitalized :

Dominate is an HTML generation library that lets you easily create tags. In dominate, python reserved words are prefixed with an underscore, so it would look like this:

Disclaimer: I am the author of dominate

HTML Generation is usually done with one of the infinite amounts of HTML templating languages available for Python. Personally I like Templess, but Genshi is probably the most popular. There are infinite amounts of them, there is a list which is highly likely to be incomplete.

Otherwise you might want to use lxml, where you can generate it in a more programmatically XML-ish way. Although I have a hard time seeing the benefit.

There’s the venerable HTMLGen by Robin Friedrich, which is hard to find but still available here (dated 2001, but HTML hasn’t changed much since then ;-). There’s also xist. Of course nowadays HTML generation, as Lennart points out, is generally better done using templating systems such as Jinja or Mako.

This is one ultra-simple HTML generator I have written. I use it build-time to generate html. If one is generating html pages run-time then there are better options available

Here is the link

And a quick example

Actually you can add any attribute such as id and class to objects in HTML.py (http://www.decalage.info/python/html).

attribs is an optional parameter of Table, TableRow and TableCell classes. It is a dictionary of additional attributes you would like to set. For example, the following code sets id and class for a table:

The same parameter can be used with TableRow and TableCell objects to format rows and cells. It does not exist for columns yet, but should be easy to implement if needed.

Ok, here’s another html generator, or I prefer to think of it as a compiler.

This is a set of base classes that can be used to define tags and attributes. Thus a tag class has attributes and children. Children are themselves Tag classes that have attributes and children etc etc. Also you can set parameters that start with your root class and work up the various branches.

This will allow you to define all the tag classes you want thus be able to create customised classes and implement any tags or attributes you want.

Just started on this, so if anybody wants to test 🙂

Источник