Giter Site home page Giter Site logo

Шаблонизатор about ajenti HOT 21 CLOSED

ajenti avatar ajenti commented on May 14, 2024
Шаблонизатор

from ajenti.

Comments (21)

Eugeny avatar Eugeny commented on May 14, 2024

Кастую команду разработчиков в этот тред и прошу проголосовать.

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

Голосую против, потому что такой подход
а) потребует от разработчтика плагина целиком верстать свой UI
б) на корню убивает консистентность дизайна UI между плагинами

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

Я сейчас делаю упрощенную шаблонизацию на UI "как есть" (см ветку newui)
Так вроде и шаблоны есть, и переверстывать не надо

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

Ничего не убивает, я сейчас переписываю текущий UI с использованием валидного XML (зачем изобретать методы get_HTML() когда все было придумано до нас в XML)
Просто использовать шаблоны нужно с умом, т.е. некоторые задачи вынести в шаблоны - например верстку страницы, будет удобнее и дизайнерам и программистам, а некоторые (типа создания UI элементов) оставить на текущем модуле
Таким образом должны остаться сплошные удобства :)
Единственное что - мне по душе больше Genshi - как полностью XML-валидный шаблонизатор

from ajenti.

k0sh avatar k0sh commented on May 14, 2024

потребует от разработчика плагина целиком верстать свой UI

то как это сейчас сделано, требует от разработчика еще больше усилий чем просто сверстать панель плагина самому.

на корню убивает консистентность дизайна UI между плагинами

не убьет если предоставить автору плагина готовые теги шаблона.

XML-валидный шаблонизатор

зачем XML о.О? есть прекрасные python style шаблонизаторы Mako, Jinja2

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

зачем XML о.О? есть прекрасные python style шаблонизаторы Mako, Jinja2

Я неправильно выразился - Genshi тоже python style, можно использовать питон как и в любом другом темплейтере. Его преимущество в том, что он не определяет новую разметку темплейтов (Мако использует % для своих тегов, а Jinja2 фигурные скобки), а использует свойства XML, что просто более читабельно для человека который просто будет редактировать шаблон.
Ну и одно из преимуществ с чем я столкнулся - так как там используется разметка внутри тегов HTML (XML), это не ломает подсветку редакторов HTML чем облегчает работу дизайнерам

то как это сейчас сделано, требует от разработчика еще больше усилий чем просто сверстать панель плагина самому.

Просто текущая реализация далека от юзабилити, хотя идея отличная

ИМХО конструктор UI идея гут и должна жить, темплейтер тоже имеет право на жизнь - текущая реалиазация dump_base_page или MainWindow просто просит темплейтера. В идеале темплейтер и UI конструктор должны быть тесно связаны. Например возможность загрузить темплейт в контрол (например сложный какой-то для редактирования кучи всего) или включить контрол в темплейт простым тегом

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

DmZ,

Возможно есть смысл сделать XML-based генератор UI (см. Glade)
Дабы не рожать тонны кода для построения интерфейса

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

ЗЫ. немного кода из Mako и Genshi:
Mako:
% for name in row
${name}
% endfor

Genshi:
${name}

ИМХО последнее красивее :) Хотя с Мако не работал, может и там можно лаконично написать

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

Возможно есть смысл сделать XML-based генератор UI (см. Glade)
Дабы не рожать тонны кода для построения интерфейса

Glade всего лишь инструмент, при загрузке интерфейса все равно вызывается тонна кода, которая правда спрятана от девелопера.
Да, это именно тот подход, о котором я говорю (наверно :)), когда есть некий шаблон index.html где прописан шаблон, а туда можно добавить что-нить типа
И этот же код (или взаимопреобразуемый) получать от ajenti.ui.Table, с возможностью сказать loadtemplate('index.html').getElementsByTag('body').appendChild(Table)
Тогда будет и единый UI и все прелести темплейтера

ЗЫ. с любым темплейтером можно сделать <% ui.Table(someparams) %> и теор. получить консистентный UI. А каким образом реализовать этот самый ui.Table - тонной прямого кода, тонной кода которая будет парсить файлик widgets/Table.xml и т.п...

from ajenti.

k0sh avatar k0sh commented on May 14, 2024

Согласен красивее :) но зато медленней (http://stackoverflow.com/questions/1324238/what-is-the-fastest-template-system-for-python). Хотя скорость в данном случае не особо важна. Отдаю свой голос за Genshi.

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

Хорошая ссылочка :) правда нам 10х1000 таблиц не нужно (хотя кто знает)
В закладки, нужно поизучать темплейтеров :)

from ajenti.

AlexSnet avatar AlexSnet commented on May 14, 2024

Голосую против!
а) Не хочу писать шаблоны
б) Удобней пользоваться классами ui
в) Без этого в любой момент можно полностью переделать UI всего лишь переписав один-пару файлов

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

б) Удобней пользоваться классами ui

Мне тоже "удобно" пользоваться ui (до полного удобства пилить и пилить)
Но если представить какой-то сложный интерфейс, то только его описание в питоне займет уйму места, и искать по этому коду, а где же тут собственно обработка данных будет проблематично.
Поэтому органичное взаимодействие шаблона и UI-классов есть ответ на такую проблему - хочешь делай классами, хочешь пиши шаблон - работать и выглядеть должно одинаково.

в) Без этого в любой момент можно полностью переделать UI всего лишь переписав один-пару файлов

В любом случае менятся будут css стили, которые ну никак на UI не завязаны :) и разница по времени изменения внешнего вида при UI и при шаблоне не существенна.

PS. Я за шаблоны если они органично впишутся в систему UI-классов

from ajenti.

vanmaxim avatar vanmaxim commented on May 14, 2024

Склонен к идеи использования шаблонизатора, и если понадобится при помощи его вызывать код ui. Только вопрос, неполучится ли у нас "спагетти-стайл" код если один будет юзать шаблоны, а другой ui

from ajenti.

AlexSnet avatar AlexSnet commented on May 14, 2024

DmZ убедил.
Если сделать возможность использовать и то и то, то...
Разумеется в таком случае надо описать типовые компоненты на том же шаблонизаторе и дать возможность создавать свои компоненты.

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

DmZ, я не совсем это в виду имел.

Допустим, плагин имеет layout.xml:
[layout]
[panel height="400" width="400"]
[label id="lblOne" text="asda" /]
[button id="btnTwo" text="qwerty" /]
[/panel]
[/layout](парсер съел угловые скобки)
и т.п.

Платформа имеет файлы panel.html, button.html, label.html, etc. (возможно, с питоновыми вставками для правильной генерации HTML основываясь на атрибутах в Layout XML) которые парсятся шаблонизатором.

Потом на ходу берется сий layout.xml и перегоняется в HTML, используя panel.html, button.html, label.html, etc.

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

Попробую обьяснить на примере, ИМХО это тоже, что Евгений имел ввиду.
(примеры взяты из документации Genshi)
Для того чтобы UI и темплейтер работали вместе - процессинг кода нужно переносить на что-то одно. В данном случае примем за основу темплейтер.
Genshi позволяет определять собственные XML-теги (типа label/panel, то что нам нужно).
Итак, положим есть файл widgets.xml следующего содержания:
<py:match path="greeting">
Hello ${select('@name')}
/py:match
Ну, или просто содержит инклуды на кучу подобных конструкций.
В основной темплейт или темплейт видгета мы импортим данный файл, и дальше используем в виде:




В итоге получим:


Hello Dude


Функции UI выдают на-гора соответствующие теги XML:
>>> ui.Span("Dude").toxml()
''
И в коде таким образом можно использовать конструкции вида (псевдокод):
template = initTemplate()
window = ui.MainWindow()
template.appendElements(window)
return template.render()
или вида:
template = initTemplate()
template.appendFromFile('layout.xml')
return template.render()

Таким образом обеспечится консистентность вида между темплейтером и UI-виджетами.

ЗЫ. Если лень писать xml для сложных виджетов, то можно запрограмить это в питоне и на конечном виджете вызвать toxml() и задампить вывод в файл, для последующего юзания - вариантов использования просто масса.

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

Это божественно, я сжигаю рукописи своего UI (:

from ajenti.

DmZ avatar DmZ commented on May 14, 2024

Это божественно, я сжигаю рукописи своего UI (:

А сколько еще интересных идей/опыта есть ;)

ЗЫ. Попытаюсь завтра накидать пример рабочий на своих плагинах (а то сегодняшнее пиво все ушло на предыдущее описание :) )

from ajenti.

k0sh avatar k0sh commented on May 14, 2024

DmZ молодчина!

from ajenti.

Eugeny avatar Eugeny commented on May 14, 2024

Перенесено:
http://groups.google.com/group/ajenti-dev/browse_thread/thread/f51899f2e69725e?hl=ru

from ajenti.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.