【问题标题】:Application modules with Pyramid带有 Pyramid 的应用程序模块
【发布时间】:2013-04-09 01:55:29
【问题描述】:

我正在使用金字塔创建一个工作流应用程序,并且我正在搜索如何使应用程序可模块化:这意味着使用 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 个应用程序,该应用程序将包含在核心应用程序中:似乎可以通过金字塔提供的 includeme 功能来实现。

我想通过 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?

提前感谢您的回答。

【问题讨论】:

    标签: module pyramid mako


    【解决方案1】:

    我推荐的解决方案是为您的模板切换到资产规范。它们是显式的,允许覆盖,并提供对模板层次结构的更好控制。这意味着您将停止使用mako.directories,而是在inheritsincluderenderer 参数中使用'workflow_app1:templates/workflow_app1.mako'。鉴于此,很明显您可以在核心应用程序中继承 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 集成目前不提供此选项。

    【讨论】:

    • 这正是我要寻找的:谢谢迈克尔!!
    • jinja 选项很有用,但在我在不同应用程序之间“共享继承”的情况下,唯一的方法是使用资产规范。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2018-07-08
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多