即使只使用jinja2,jinja2.exceptions.TemplateNotFound的原因

时间:2016-03-31 20:39:08

标签: jinja2

事后问题的原因很明显,但我想在这里分享一个不那么明显的原因。

运行

等代码时
import jinja2

templateLoader = jinja2.FileSystemLoader(searchpath=".")
templateEnv = jinja2.Environment(loader=templateLoader,
                                 trim_blocks=True,
                                 lstrip_blocks=True)

htmlTemplateFile = 'file.jinja.html'
htmlTemplate = templateEnv.get_template(htmlTemplateFile)

如果你遇到这个问题:

Traceback (most recent call last):
    ...
  File "file.py", line xyz, in some_func
    htmlTemplate = templateEnv.get_template(htmlTemplateFile)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jinja2/environment.py", line 812, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jinja2/environment.py", line 774, in _load_template
    cache_key = self.loader.get_source(self, name)[1]
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jinja2/loaders.py", line 187, in get_source
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: file.jinja.html

你可能会在网上发现这个问题,指出这个问题必须与jinja2与flaskGAEPyramid或{{3}的互动有关。确实可能是您的模板不在“模板”文件夹中,但这个问题可能来自jinja2os模块的交互。

1 个答案:

答案 0 :(得分:0)

罪魁祸首是通过例如

更改当前目录
import os
os.chdir(someDir)

如果在此点之后调用templateEnv.get_template(...),则jinja2将在“当前”目录中查找模板,即使它已更改。

由于模块os提供os.chdir但不提供os.pushdir / os.popdir,因此必须模拟后一对或完全避免使用chdir。