金字塔插件(主题,视图等)

时间:2011-11-20 10:42:26

标签: python plugins pyramid entry-point

好的,这是问题的简要说明。我确实有一个金字塔设置,开始看起来像一个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 个答案:

答案 0 :(得分:6)

在Pyramid中,您可以使用render_to_reponse函数在运行时选择模板。但是如果你想要一个更加 cooked 的解决方案,你可能会受到Kotti的启发,这是一个已经支持插件的金字塔CMS,而look and feel customization带有'Babel'用于国际化。为了使用另一个'主题',您必须按照Kotti使用的约定编写另一个包含一些模板和静态资源的包,然后在.ini配置文件中激活包。

要了解Kotti如何实现这一目标,您应该从this line开始遵循代码路径

无论如何,Kotti对Pyramid应用程序的配置方式做了一些假设,例如SQLAlchemy用于存储,formencode用于表单生成或遍历将视图映射到资源,所以YMMV。金字塔本身对你这样做的方式不感兴趣。