Плагины для пирамиды (темы, просмотры и т.д.)

Хорошо, вот проблема вкратце. У меня есть настройка пирамиды, которая начинает выглядеть как CMS. У меня в качестве базовых моделей: [аккаунты, страницы, ошибки, меню, конфиги]

Это работает довольно хорошо, но у меня есть небольшая проблема с чем-то. В настоящее время я использую git, и в некоторых ветках у меня есть разные шаблоны, а в основной ветке я вношу изменения в ядро.

Вместо этого я хотел бы иметь возможность устанавливать темы. Темы будут представлять собой набор файлов шаблонов/статических файлов (css/js).

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

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

Вторая проблема заключается в том, что эти сайты требуют разного контента. Например, одному потребуется «Вопрос», а другому — «Продукты».

Так что у меня есть эта идея в виду

class TemplatePlugin(PyramidPlugin):
    template_path = ''
    static_path = ''

    def register(self, config, app):
        '''Inject the plugin in the application... how I'm not sure yet'''

    def unregister(self):
        '''unregister the plugin if something is needed'''

    def (before/after)_(request/newapp...)(self,...):
        '''do some stuff for some events most are optional'''

И другой плагин для моделей

class PyramidPlugin(pyramid_plugin):
    def register(self, config, app):
         '''add routes,
            add view handlers (view_config)
            add models acl to the acl list
         '''

    # other functions similar to the above class to handle events

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

Как это работает через точки входа, для меня до сих пор загадка. Будут ли плагины использовать переводы Babel... Могу ли я использовать свой перевод Babel в своих плагинах шаблонов? Когда точка входа загружена. Текущий каталог - это каталог проекта или каталог точки входа? Я считаю, что могу легко получить путь с помощью дистрибутива, но я не уверен, что это правильный способ сделать все это... Я чувствую, что попадаю в совершенно новую землю, заполненную минами.


person Loïc Faure-Lacroix    schedule 20.11.2011    source источник


Ответы (1)


В Pyramid вы можете выбирать шаблоны во время выполнения, используя рендеринг_в_ответ. Но если вам нужно более готовое решение, вас может вдохновить Котти, Pyramid CMS, которая уже имеет поддержку надстроек и настройку внешнего вида с «Babel» для интернационализации. Чтобы использовать другую «тему», вам нужно написать другой пакет с некоторыми шаблонами и статическими активами в соответствии с соглашением, которое использует Kotti, а затем вы активируете пакет в файле конфигурации .ini.

Чтобы понять, как Котти достигает этого, вы должны начать следовать пути кода из эта строка

В любом случае, Котти делает некоторые предположения о том, как сконфигурировано приложение Pyramid, например SQLAlchemy для хранения, formencode для генерации форм или обхода для сопоставления представлений с ресурсами, поэтому YMMV. Сама Пирамида не имеет мнения о том, как вы это делаете.

person Danny Navarro    schedule 20.11.2011