2016-03-31 2 views
0

問題の原因は事実の後では明白ですが、あまりにも明白ではない原因をここで共有したいと思います。jinja2を使用している場合でもjinja2.exceptions.TemplateNotFoundの原因

あなたはこの問題取得する場合のコードのような

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、またはSQLであり、実際にはテンプレートが「テンプレート」フォルダにない可能性がありますが、この問題はjinja2およびosモジュール。 templateEnv.get_template(...)はこの時点を過ぎて呼び出された場合

答えて

0

犯人は、例えば、

import os 
os.chdir(someDir) 

でカレントディレクトリを変更して、Jinja2のはそれが変更された場合でも、「現在」のディレクトリにテンプレートを探します。

モジュールosos.chdirなくos.pushdir/os.popdirを提供するので、一つは後者のペアをシミュレートまたは完全CHDIRを回避するためのいずれか有しています。