2017-06-11 3 views
1

私はJinja2テンタリングを使用するプロジェクトを構築しようとしています。私は他の多くのプロジェクトでインポートできる一種のテンプレートライブラリを持っていたいと思います。私が持っている問題は、プロジェクトのテンプレート内からこのライブラリのテンプレートをインクルード/インポートする方法を見つけることができないということです。PythonとJinja2 - 別の環境のテンプレートをインポート

一例として、私たちは作品を我々はJinja2のドキュメントでhere

ファイルforms.html

{% macro input(name, value='', type='text') -%} 
<input type="{{ type }}" value="{{ value|e }}" name="{{ name }}"> 
{%- endmacro %} 

ProjectPage.html

{% import 'forms.html' as forms %} 
<dl> 
    <dt>Username</dt> 
    <dd>{{ forms.input('username') }}</dd> 
    <dt>Password</dt> 
    <dd>{{ forms.input('password', type='password') }}</dd> 
</dl> 

この例を見つけると同じ例を使用することができます"forms.html"テンプレートは "ProjectPage.html"と同じ環境にあるためです。多くのプロジェクトでマクロを使用できるので、後でインポートできるモジュールの中に入れたいと思います。これにより、マクロテンプレートが別の環境に作成され、インポートステートメントが失敗します。

私はこの仕事をすることができますか?

答えて

1

まあ、 私は質問を投稿してからそれほど長い間解決策を見つけることができませんでした。それはかなり簡単です。

globals属性を使用して環境に変数を渡すことができるようです。テンプレートオブジェクトに対してimportステートメントを作成することもできます。

私は自分のライブラリ環境を自分のプロジェクト環境に渡します。get_templateを私のプロジェクトテンプレートから呼び出すことができます。

{% import mylib.get_template('folder1/theTemplate.tpl') as mytemplate %} 

良い一日

:私のテンプレートで次に

env.globals['mylib'] = jinja2.Environment(loader=jinja2.PackageLoader('mylib', 'templates')) 

関連する問題