29

Jinja2%(here)s/other/template.htmlは、ファイル システム内の現在のテンプレートの場所に関連する他のテンプレートを含めるなど、テンプレート相対パスをサポートしていますか?

4

4 に答える 4

44

私はそうは思わない。通常、他のテンプレートを含めるか拡張するには、使用しているテンプレートローダーと環境のルートを基準にしたパスを指定します。

テンプレートがすべて入っていて/path/to/templates、Jinjaを次のように設定したとします。

import jinja2
template_dir = '/path/to/templates'
loader = jinja2.FileSystemLoader(template_dir)
environment = jinja2.Environment(loader=loader)

ここで/path/to/templates/includes/sidebar.html/path/to/templates/index.htmlテンプレートに含めたい場合は、次のように記述しますindex.html

{% include 'includes/sidebar.html' %}

そしてJinjaはそれを見つける方法を理解するでしょう。

于 2010-02-01T22:38:46.093 に答える
18

Will McCutchenの答えに追加するだけで、

ローダーには複数のディレクトリを含めることができます。次に、テンプレートが見つかるまで、各ディレクトリを (順番に) 検索します。

たとえば、「/includes/sidebar.html」の代わりに「sidebar.html」が必要な場合は、次のようにします。

loader=jinja2.FileSystemLoader(
        [os.path.join(os.path.dirname(__file__),"templates/includes"),
         os.path.join(os.path.dirname(__file__),"templates")])

それ以外の

loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),"templates"))
于 2012-03-19T00:42:56.897 に答える
9

jinja2.Environment.join_path()のドキュメントによると、「テンプレート パスの結合」を実装するために join_path() をオーバーライドすることで、相対テンプレート パスのサポートが可能です。

class RelEnvironment(jinja2.Environment):
    """Override join_path() to enable relative template paths."""
    def join_path(self, template, parent):
        return os.path.join(os.path.dirname(parent), template)
于 2010-09-07T05:02:09.283 に答える