14

変数に基づいて別の HTML ファイルを参照したいと考えています。次の形式でインクルードを使用しています。

{% include 'templates/case/{{cid}}/intro.html' %}

これはエラーをスローします:

TemplateNotFound: templates/case/{{cid}}/intro.html

これを見ると、Jinja2 が実行時に変数を解決しないことがわかります。(ABCはパス内のフォルダーの名前です)の値なcid = ABCので、合計パスは次のようになると予想しました。

templates/case/ABC/intro.html

この解決されたパスをインクルードで直接使用すると、機能します。

どうすればこれを解決できますか?

4

4 に答える 4

17

少なくともJinja2 2.7.1ではこれが機能します:

{% include 'templates/case/%s/intro.html' % cid %}
于 2015-02-26T10:03:07.773 に答える
6

ここで別のスタックオーバーフローの質問で答えを見つけました:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %}
于 2013-10-14T21:08:59.940 に答える
3

ビューコードで常にフルパスを計算し、それをテンプレートに渡すことができます。その時点で、変数を囲む引用符と中括弧を削除します。

これを行う間、パストラバーサル攻撃に注意してください。

于 2012-09-02T08:27:39.073 に答える