模板查找问题。我不明白的是什么?

时间:2013-04-19 08:23:22

标签: python mako python-3.3

背景

我有以下目录结构:

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

计划是将模板目录中的模板添加到include一堆组件。

在template1.mak中的

我有类似的东西:

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

其中xxxcomponents/component1.makcomponent1.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目录中?我对模板查找缺少什么或不了解?

2 个答案:

答案 0 :(得分:4)

在模板中定义xxx调用时尝试设置前导/

答案 1 :(得分:3)

只是想提供更具信息性的答案 - 路径实际上取决于执行代码的文件。

示例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模板不知道在mymodules/modulename.py文件的相对目录中查找它所谓的mymodules/templates/edit.html不知道为什么(或者可能只是我的旧版本Mako模板)

尽管<%include file="xxx.mak"/>表现不同,因为它会相对查找找到文件的位置,这就是为什么/将其拉高一级 - 然后查看templates/ 1}} ..但它再一次,对于服务器中某处的模块它不起作用....

希望它能帮助别人......