4

背景:

我有以下目录结构:

/absolute/path/to/templates
            components/
                   component1.mak
                   component2.mak
            template1.mak

该计划是将模板目录中的模板转换include为一堆组件。

在 template1.mak 我有类似的东西:

 <%include file="xxx.mak"/>

在哪里xxxcomponents/component1.mak或者只是component1.mak(我都尝试了不同的结果,详情如下)

mylookup = TemplateLookup(directories=[yyy,])
oTemplate = Template(filename='/path/to/templates/template1.mak', lookup=mylookup)
oTemplate.render(args)

其中 yyy 是'/absolute/path/to/templates'或者'/absolute/path/to/templates/components'

问题:

无论我使用 xxx 和 yyy 值的哪种组合,都会出现模板查找异常。yyy (查找路径)的值似乎对异常没有任何影响。

如果 xxx (包含标记路径)是'components\component1.mak'错误,则表示找不到文件/absolute/path/to/templates/components/component1.mak。如果xxx只是'component1.mak'那么错误是它找不到 /absolute/path/to/templates/component1.mak

问题

我怎样才能让 mako 将这些东西包含在 components 目录中?我对模板查找缺少什么或不了解什么?

4

2 回答 2

5

/在模板中定义您的 xxx 调用时,请尝试放置前导。

于 2013-04-20T10:48:10.697 回答
5

只是想提供一个更多信息的答案 - 路径实际上取决于哪个文件执行了代码。

示例 1

web/file.cgi              // was called first from the web
web/templates/header.mako // was called somewhere in file.cgi

在这种情况下,查找目录应该是:

mylookup = TemplateLookup(directories=['templates/'])

示例 2

// was called first from the web
web/file.cgi                 

// was imported and called in file.cgi
../somewhere/in-PYTHONPATH/mymodules/modulename.py

// was called from modulename.py
../somewhere/in-PYTHONPATH/mymodules/templates/edit.html 

那么您的查找目录实际上应该是:

 mylookup = TemplateLookup(directories=['../../../../somewhere/in-PYTHONPATH/mymodules/templates/'])
 OR
 mylookup = TemplateLookup(directories=['/fullpath/to/somewhere/in-PYTHONPATH/mymodules/templates/'])

您需要完整路径,因为web/file.cgi它不位于后端模块的相对路径中......

由于某种原因,Mako Templates 不知道在相对目录中查找mymodules/modulename.py它调用mymodules/templates/edit.html不确定原因的文件(或者它可能只是我的旧版本 Mako Templates)

但是<%include file="xxx.mak"/>,行为不同,因为它确实相对于找到文件的位置进行查找,这就是为什么将其/拉上一层的原因-然后它查看了templates/.. 但同样,它对模块的工作方式不同在服务器的某个地方....

希望它可以帮助别人......

于 2016-11-21T13:42:15.017 回答