Плагины для пирамиды (темы, представления и т. Д.) - PullRequest
2 голосов
/ 20 ноября 2011

Хорошо, вот проблема вкратце. У меня есть настройка пирамиды, которая начинает выглядеть как 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 в плагинах шаблонов? Когда точка входа загружена .. текущий каталог является каталогом проекта или каталогом точки входа? Я верю, что могу легко найти путь с помощью дистрибуции, но я не уверен, как правильно сделать все это ... Я чувствую, что попадаю в совершенно новую страну, наполненную минами.

1 Ответ

6 голосов
/ 20 ноября 2011

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

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

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

...