金字塔应用模块

时间:2013-04-16 15:18:40

标签: module pyramid mako

我正在创建一个带金字塔的工作流应用程序,我正在搜索如何使应用程序可模糊:意味着使用sqlalchemy模型创建核心应用程序,使用wtforms创建基本表单,使用mako创建一些基本模板。

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

    App_Core/core.ini
            /setup.py
            /...
            /App_Core/
                    /__init__.py
                    /models.py
                    /forms.py
                    /utils.py
                    /templates/
                    /templates/base.mako...
                    /static/
                    /static/staticfiles...

我的目标是创建 1个每个工作流程的应用,它将包含在Core应用中:似乎可以通过金字塔提供的 includeme 功能来实现。< / p>

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

pyramid.includes =       
   workflow_app1
   workflow_app2
   workflow_app3
   ...

我使用以下结构定义了一个名为 workflow_app1 的新应用:

worflow_app1/
            /setup.py
            /...
            /workflow_app1/
                         /__init__.py
                         /models.py
                         /forms.py
                         /views.py
                         /templates/
                         /templates/workflow_app1.mako
                         /...

_ init _。py 文件将包含includeme函数,并将定义新路由:

def includeme(config):
    config.add_route('route1', '/route1/')
    config.add_route('route2', '/route2/')
    config.scan()

当我正在为worflow_app1编写视图时,我正在渲染到该应用程序附带的模板,但是当我从核心应用程序调用它时,它无法呈现模板并给出以下错误:

TopLevelLookupException: Cant locate template for uri 'workflow-app1.mako'

此错误非常符合逻辑,因为mako.directories指令的路径为 App_Core_PATH / templates ,因此我的模板应位于同一文件夹中。

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

问题2:  是否可以从核心应用程序中继承 workflow-app1.mako 继承base.mako?

先谢谢您的回答。

1 个答案:

答案 0 :(得分:1)

我建议的解决方案是切换到模板的资产规格。它们是显式的,允许覆盖,并提供对模板层次结构的更好控制。这意味着您将停止使用mako.directories,而是在'workflow_app1:templates/workflow_app1.mako'inheritsinclude参数中使用renderer。鉴于此,显然您可以从核心应用中的base.mako继承,而管理mako.directories选项则更加困难。

如果您在mako.directories上已经死定,那么每次向pyramid.includes添加包时都可以为其添加一行。

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

另一种选择是切换到jinja2,因为它的插件能够在事后添加搜索路径。因此,您所包含的模块可以config.add_jinja2_search_path(...)将自己投入查找顺序。 Pyramid的mako集成目前不提供此选项。