Jinja2を構成してアプリケーションのテンプレートをロードする最も簡単な方法は、おおよそ次のようになります。
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
これにより、デフォルト設定とテンプレートをルックアップするローダーでテンプレート環境が作成されます テンプレート 内のフォルダー あなたの申請 pythonパッケージ。
結局のところ、これはそれほど簡単ではありません。テンプレートを使用してpythonパッケージを作成/インストールする必要があるためです。特に、コード。 here および here のトピックに関するSOの質問を参照できますが、答えはあいまいで不満です。
単純な初心者がやりたいことは、明らかに、パッケージ内のリソースとしてではなく、ファイルシステムから直接テンプレートをロードすることです。 これはどのように行われますか?
方法は次のとおりです:FileSystemLoader
の代わりにPackageLoader
を使用します。ウェブ上で例を見つけました here および here 。テンプレートと同じディレクトリにpythonファイルがあるとしましょう:
./index.py
./template.html
このindex.pyはテンプレートを見つけてレンダリングします:
#!/usr/bin/python
import jinja2
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = "template.html"
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render() # this is where to put args to the template renderer
print(outputText)
結局、jinja2 APIドキュメントには すべての組み込みローダーについて説明するセクション があるため、すぐに気付かなかったのはちょっと恥ずかしいことです。しかし、導入部では、PackageLoader
がデフォルトの「最も簡単な」メソッドであるように表現されています。 Pythonの初心者にとって、これは野生のガチョウの追跡につながる可能性があります。
より簡単な方法は、 jinj2.Template
コンストラクターを直接呼び出し、open
を使用してファイルをロードすることです。
from jinja2 import Template
with open('template.html.jinja2') as file_:
template = Template(file_.read())
template.render(name='John')
ライナーは次のとおりです。
template = Template(open('template_file.j2').read())
次に、テンプレートを別の行でレンダリングするか、すべてを1行でレンダリングできます。
rendered = Template(open('template_file.j2').read()).render(var="TEXT")