背景
我有以下目录结构:
/absolute/path/to/templates
components/
component1.mak
component2.mak
template1.mak
计划是将模板目录中的模板添加到include
一堆组件。
我有类似的东西:
<%include file="xxx.mak"/>
其中xxx
为components/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目录中?我对模板查找缺少什么或不了解?
答案 0 :(得分:4)
在模板中定义xxx调用时尝试设置前导/
。
答案 1 :(得分:3)
只是想提供更具信息性的答案 - 路径实际上取决于执行代码的文件。
web/file.cgi // was called first from the web
web/templates/header.mako // was called somewhere in file.cgi
在这种情况下,查找目录应为:
mylookup = TemplateLookup(directories=['templates/'])
// 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}} ..但它再一次,对于服务器中某处的模块它不起作用....
希望它能帮助别人......