1. ホーム
  2. python

[解決済み] ファイルシステムから直接jinjaテンプレートを読み込む方法

2022-08-10 22:38:07

質問

その jinja API ドキュメント(pocoo.org)。 には、次のような記述があります。

アプリケーションのテンプレートをロードするために Jinja2 を設定する最も簡単な方法は、おおよそ次のようなものです。
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))

これは、デフォルトの設定でテンプレート環境を作り、テンプレートを探すローダーを テンプレート フォルダの中にある アプリケーション pythonパッケージの中にあります。

結局のところ、これはそれほど単純ではありません。なぜなら、あなたのテンプレートを含むpythonパッケージを作成/インストールしなければならず、特にあなたのコードを配布する意図がない場合は、多くの不必要な複雑さが発生するからです。 このトピックに関するSOの質問を参照することができます ここで はこちら といった具合に、曖昧で納得のいかない答えが返ってきます。

素朴な初心者がやりたいことは、明らかに、パッケージ内のリソースとしてではなく、ファイルシステムから直接テンプレートをロードすることです。

これはどのように行われるのでしょうか。

どのように解決するのですか?

方法は以下の通りです。 を使用します。 FileSystemLoader の代わりに PackageLoader . ウェブで見つけた例 ここで はこちら . テンプレートと同じディレクトリに 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の初心者にとっては、これは無駄足になる可能性があります。