さて、Ali が書いたものを使用して、App Engine に固有のソリューションにたどり着きました (そのインポート キャッシュのため)。残念ながら、Ali のコードは App Engine では機能しません。なぜなら、Jinja グローバルを設定するコードは 1 回しかインポートされない (グローバルが事実上静的になる) からです。
独自のrender()
関数を作成し、そこでコンテキストを更新する必要がありました。完全を期すために、以下は私がたどり着いたコードです。
def render(template, **kwargs):
response_code = kwargs.pop('response_code', 200)
mimetype = kwargs.pop('mimetype', 'text/html')
for item in getattr(settings, 'CONTEXT_PROCESSORS', []):
try:
processor = import_string(item)
kwargs.update(processor(local.request))
except (ImportError, AttributeError), e:
logging.error(e)
return Response(jinja_env.get_template(template).render(**kwargs),
status=response_code, mimetype=mimetype)
これは App Engine 固有のものです。他の環境では、Ali のコードは期待どおりに動作します (そのため、質問にタグを付け直しています)。