App EngineでPython 2.5を使用して、Jinja2 ModuleLoaderを動作させようとしました。私が使用する環境の初期化にPythonモジュールのJinjaテンプレート(プリコンパイル済みテンプレート)
: 'コンパイル'
@staticmethod # get Jinja environment (global)
def get_new(): # and initialize Jinja environment
if myEnv._my_env == None :
path = os.path.join(os.path.dirname(__file__), 'compiled')
myEnv._my_env = Environment(loader = ModuleLoader(path))
return myEnv._my_env
は私のGAEプロジェクトのディレクトリです。 しかし、私はいつもTemplateNotFound例外を受け取りますか?
私が使用してテンプレートをコンパイル:
env = Environment(extensions=['jinja2.ext.i18n'])
env.filters['euros'] = Euros
db_runtimes = Runtimes.all() # the html templates saved in a db.Blob
for each in db_runtimes.fetch(999) :
key = each.key().name()
source = db.Blob(each.content).decode('utf-8')
name = key.split('.')[0]
raw = env.compile(source, name=name, filename=name + '.py', raw=True)
each.compiled = db.Blob(raw.encode('utf-8')) # compile and save the .py
each.put()
結果のコードは正常に見えます。何か案は? 私があなたを助けてくれることを願っています。 Rodrigo Moraesのこの記事は、Pythonモジュールからのテンプレートの読み込みが非常に高速であることを示しています。しかし、この2009年の概念証明では、コードを実行できるようにするためにJinjaコードを「ハッキング」しました。私はModuleLoaderが同じ仕事をするべきだと思います。 https://groups.google.com/group/pocoo-libs/browse_thread/thread/748b0d2024f88f64
testmod.pyは次のようになります。
from __future__ import division
from jinja2.runtime import LoopContext, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join, to_string, identity, TemplateNotFound
name = u'testmod.py'
def root(context, environment=environment):
if 0: yield None
yield u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n<title>TEST</title>\n</head>\n<body>\n\t<p>test template</p>\n</body>\n</html>'
blocks = {}
debug_info = ''
とページハンドラ:
def get(self):
my_env = myEnv.get()
page = 'testmod.py'
template = my_env.get_template(page)
self.response.out.write(template.render({}))
I'haveもの.py拡張子のないテンプレートを取得しようとしました。
は、コンパイル/ app.yamlを中static_dirとして指定していますか? – geoffspear
compiledはPythonパッケージですが、app.yamlにハンドラは必要ありません。 – voscausa