3

私は Jinja2 を使用しており、一緒に機能するいくつかのタグを作成しようとしています。たとえば、次のようなテンプレートがある場合:

{{ my_summary() }}
... arbitrary HTML ...
{{ my_values('Tom', 'Dick', 'Harry') }}
... arbitrary HTML ...
{{ my_values('Fred', 'Barney') }}

私は次のようになります:

This page includes information about <b>Tom</b>, <b>Dick</b>, <b>Harry</b>, <b>Fred</b>, and <b>Barney</b>.
... arbitrary HTML ...
<h1>Tom, Dick, and Harry</h1>
... arbitrary HTML ...
<h1>Fred and Barney</h1>

つまり、ページの先頭にある my_summary() には、ページの後半で提供される情報が含まれます。includeandimportステートメントで発生する式も考慮に入れるのに十分スマートである必要があります。

これを行う最善の方法は何ですか?

4

1 に答える 1

4

免責事項: 私はジンジャを知りません。

私の推測では、これを (簡単に) 達成することはできません。

次の代替案をお勧めします。

  • Tom、Dick などの値を変数として外部からテンプレートに渡します。
  • カスタム タグが引数として値を取得できるようにします。
  • あなたの場合、「外側」が何であるかわかりません。テンプレートが Web アプリ フレームワークで使用される場合、「外側」はおそらくコントローラー メソッドです。
  • 例えば:

テンプレート:

{{ my_summary(list1 + list2) }}
... 任意の HTML ...
{{ my_values(list1) }}
... 任意の HTML ...
{{ my_values(list2) }}

コントローラ:

def a_controller_method(リクエスト):
    return render_template('テンプレートファイル名', {
        'list1': ['Dick', 'Tom', 'Harry'],
        'list2': ['フレッド', 'バーニー']})
  • 外部から値を渡すことができない場合は、次のようにテンプレートの先頭で定義することをお勧めします。
{% set list1 = ['Dick', ...] %}
{% set list2 = ['Fred', ...] %}
{{ my_summary(list1 + list2) }}
... 任意の HTML ...
{{ my_values(list1) }}
... 任意の HTML ...
{{ my_values(list2) }}
于 2009-02-11T10:55:22.750 に答える