0 / 0 / 0
Регистрация: 21.01.2023
Сообщений: 10

PGHtml | Шаблонизатор с использованием PostgreSQL

25.02.2023, 10:49. Показов 1102. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день, коллеги.

Сделал собой утилиту командной строки, которая создает HTML, JS, JSON и другие типы файлы с использованием данных, получаемых из базы данных PostgreSQL.
Файл создается из файла-источника, в котором проводится подстановка(замена) тегов и переменных.

Исходный код открыт, выложен на GitHub https://github.com/PGHtml/PGHtml, можно форкать и копировать.

Пример замены

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- единичное значение из базы данных -->
<pghtml-sql>
select user
</pghtml-sql>
 
<!-- множественые значения -->
<pghtml-sql>
select tablename from pg_tables
  where schemaname='pg_catalog' limit 5
</pghtml-sql>
 
<!-- включение файла example_include.html -->
<pghtml-include>example_include.html</pghtml-include>
преобразовывается в

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<!-- единичное значение из базы данных -->
postgres
 
<!-- множественые значения -->
pg_statistic
pg_type
pg_foreign_table
pg_authid
pg_statistic_ext_data
 
<!-- включение файла example_include.html -->
[ file example_header.html ]
Ключевые особенности

Проверка на изменение - если содержимое результирующего файл не изменилось, то файл не перезаписывается и, соответственно, web-сервер не выполняет публикацию (deploy)
Импорт - реализована поддержка импорта других файлов (например, фрагмента HTML или данных в формате JSON)
Список изменений - возможно сформировать файл-список со списком измененных файлов
Обработка ошибок - при возникновении ошибки (например, при выполнении SQL запроса) обработка продолжается, в лог (stderr) выводится расширенная информация и по окончании выполнения утилита возвращает в ОС признак неуспешного выполнения (1). Это позволяет настроить мониторинг обновления данных на сайте
Указание обрабатываемых файлов - возможна обработка конкретных файлов, директорий с рекурсией и указанием расширений файлов. При этом определяются встроенные переменные, которые можно использовать при формировании ссылок и в SQL запросах. Рекомендуется указывать корневую директорию сайта
Переменные - поддерживаются переменные из командной строки, встроенные (директории, пути до файлов и т.д) и атрибуты тега при импорте файла
Неограниченная вложенность - поддерживается включение файлов внутри включаемого файла, многократное переопределение переменных и их использование внутри другой переменной
Условия и циклы - программирование внутри файлов не поддерживается, для реализации логики необходимо использовать хранимые процедуры PostgreSQL

Более подробно можно ознакомиться и скачать на сайте http://pghtml.org/ru/
Также сделан ролик на youtube https://www.youtube.com/watch?v=DJ9J-YWCmfs

Вопросы и конструктивная критика приветствуется, можно здесь или в личку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2023, 10:49
Ответы с готовыми решениями:

Авторизация в ASP.NET Core с использованием PostgreSQL
Добрый день. Я пытаюсь написать небольшую систему. На Постгре у меня есть таблица Пользователи с полями Id, username и Password. Также я...

Написать программу для работы с БД на Python с использованием Postgresql и QTableview
Есть у меня задание, накидать программу для работы с бд (сохранение, удаление, отмена изменений, сортировка, поиск, фильтрация) с...

Не могу запустить проект (Django+postgreSQL) с использованием Docker на Windows
Сделал Dockerfile и docker-compose.yml, со следующим содержимым: FROM python:3 ENV PYTHONUNBUFFERED=1 WORKDIR /code/ COPY...

3
Эксперт .NET
 Аватар для Usaga
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,458
26.02.2023, 11:43
Цитата Сообщение от PGSuite Посмотреть сообщение
Шаблонизатор с использованием PostgreSQL
Но... зачем?)
0
0 / 0 / 0
Регистрация: 21.01.2023
Сообщений: 10
27.02.2023, 20:46  [ТС]
Инструмент предназначен для отображения на сайтах статической информации из базы данных, которая:
  • редко меняется (например, справочники)
  • подготовка требует длительного времени
  • не требует актуальность в режиме реального времени (например, ТОП товаров)

Описание на главной странице сайта https://pghtml.org/ru/#description

--
Также смотрел другие шаблонизаторы и решения с возможностью подключения к базе данных: простых и легковесных не обнаружил
0
Эксперт .NET
 Аватар для Usaga
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,458
28.02.2023, 02:51
Цитата Сообщение от PGSuite Посмотреть сообщение
Также смотрел другие шаблонизаторы и решения с возможностью подключения к базе данных: простых и легковесных не обнаружил
Наверное потому, что так не делают)

В чём вы для себя видите сложность хранения шаблона вне базы и заполнению его данными из этой базы? Не хотите в базу лишний раз сходить? Ну так кеш вам в руки.

А так получается хрупкое решение. Нужно периодически пинать какую-то стороннюю утилиту, которая всё равно будет базу опрашивать и перегенерировать эти шаблоны. Когда её надо пинать? Как-то же надо отслеживать, что данные изменились. Ещё, надо будет синхронизировать обращение к этой утилите, чтобы в несколько потоков она не пнулась, чтобы файлы шаблонов в параллель не переписывались, что к проблемам привести может. Её и пересобирать надо под каждую ОС на которой веб-приложение крутиться будет.

В общем, практическая ценность сомнительна. Больше проблем создаёт, нежели решает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2023, 02:51
Помогаю со студенческими работами здесь

При попытке подключится к postgresql с использованием zeos не найдены libpq81.dll и libpq.dll
Помогите, пожалуйста. Установил zeos (ZEOSDBO-6.6.6-stable) на Delphi 7, вроде всё встало нормально. пытаюсь установить соединение с...

Шаблонизатор
как вывести код &lt;div class='block01'&gt;Авторизация&lt;/div&gt; &lt;form id=&quot;form4&quot; action=&quot;/users/login.php&quot;...

шаблонизатор
Всем добрый день. Для одного проекта нужен небольшой шаблонизатор . Скрипт следующий: &lt;?php class html_generator { public...

Шаблонизатор
Здравствуйте, как сделать шаблонизатор без ООП. Прошу пример. Добавлено через 24 минуты Нужен шаблонизатор с тегами типа {username}...

Шаблонизатор js
Здравствуйте, есть преимущество использовать при разработки яваскрипт шаблонизатор? И они вообще на работе требуются? Подскажите,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru