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