Module 具有金字塔的应用程序模块

Module 具有金字塔的应用程序模块,module,pyramid,mako,Module,Pyramid,Mako,我正在使用pyramid创建一个工作流应用程序,并正在研究如何使应用程序可模块化:这意味着使用sqlalchemy模型创建一个核心应用程序,使用wtforms创建基本表单,使用mako创建一些基本模板 “核心”应用程序的基本结构是: 我的目标是为每个工作流创建1个应用程序,该应用程序将包含在核心应用程序中:似乎可以通过pyramid提供的includeme功能来实现 我希望通过core.ini文件包含每个工作流,例如: pyramid.includes = workflow_

我正在使用pyramid创建一个工作流应用程序,并正在研究如何使应用程序可模块化:这意味着使用sqlalchemy模型创建一个核心应用程序,使用wtforms创建基本表单,使用mako创建一些基本模板

“核心”应用程序的基本结构是:

我的目标是为每个工作流创建1个应用程序,该应用程序将包含在核心应用程序中:似乎可以通过pyramid提供的includeme功能来实现

我希望通过core.ini文件包含每个工作流,例如:

pyramid.includes =       
   workflow_app1
   workflow_app2
   workflow_app3
   ...
我定义了一个名为工作流\u app1的新应用程序,其结构如下:

worflow_app1/
            /setup.py
            /...
            /workflow_app1/
                         /__init__.py
                         /models.py
                         /forms.py
                         /views.py
                         /templates/
                         /templates/workflow_app1.mako
                         /...
文件将包含includeme函数并定义新路由:

def includeme(config):
    config.add_route('route1', '/route1/')
    config.add_route('route2', '/route2/')
    config.scan()
当我为worflow_app1编写视图时,我将渲染到该应用程序附带的模板,但当我从core应用程序调用它时,它无法渲染模板,并出现以下错误:

TopLevelLookupException: Cant locate template for uri 'workflow-app1.mako'
此错误非常合乎逻辑,因为mako.directories指令与路径App_Core_path/templates一起给出,因此我的模板应该位于同一文件夹中

问题1: 是否可以让mako在每个模块文件夹中搜索想要的模板

问题2: 是否可以使工作流-app1.mako从核心应用程序继承base.mako


提前感谢您的回答。

我建议的解决方案是切换到模板的资产规格。它们是显式的,允许重写,并提供对模板层次结构的更好控制。这意味着您将停止使用
mako.directories
,而是在
继承
包含
呈现程序
参数中使用
'workflow\u app1:templates/workflow\u app1.mako'
。有鉴于此,很明显,您可以在核心应用程序中继承
base.mako
,而管理
mako.directories
选项则更为困难

如果您在
mako.directories
上死机,那么您可以在每次将包添加到
pyramid.includes
时向其添加一行

mako.directores = 
    App_Core:templates
    workflow_app1:templates
    workflow_app2:templates

另一个选择是切换到jinja2,因为它的插件能够在事件发生后添加搜索路径。因此,您包含的模块可以
config.add\u jinja2\u search\u path(…)
将自己放入查找顺序中。金字塔的mako集成目前不提供此选项。

我建议的解决方案是切换到模板的资产规格。它们是显式的,允许重写,并提供对模板层次结构的更好控制。这意味着您将停止使用
mako.directories
,而是在
继承
包含
呈现程序
参数中使用
'workflow\u app1:templates/workflow\u app1.mako'
。有鉴于此,很明显,您可以在核心应用程序中继承
base.mako
,而管理
mako.directories
选项则更为困难

如果您在
mako.directories
上死机,那么您可以在每次将包添加到
pyramid.includes
时向其添加一行

mako.directores = 
    App_Core:templates
    workflow_app1:templates
    workflow_app2:templates

另一个选择是切换到jinja2,因为它的插件能够在事件发生后添加搜索路径。因此,您包含的模块可以
config.add\u jinja2\u search\u path(…)
将自己放入查找顺序中。金字塔的mako集成目前不提供此选项。

这正是我要搜索的:谢谢你,Michael!!jinja选项是有用的,但在我的不同应用程序之间“共享继承”的情况下,唯一的方法是使用资产规格。这正是我要搜索的:谢谢你,Michael!!jinja选项是有用的,但是在我的例子中,在不同的应用程序之间“共享继承”,唯一的方法是使用资产规格。