我正在创建一个带金字塔的工作流应用程序,我正在搜索如何使应用程序可模糊:意味着使用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?
先谢谢您的回答。
答案 0 :(得分:1)
我建议的解决方案是切换到模板的资产规格。它们是显式的,允许覆盖,并提供对模板层次结构的更好控制。这意味着您将停止使用mako.directories
,而是在'workflow_app1:templates/workflow_app1.mako'
或inherits
或include
参数中使用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集成目前不提供此选项。