0

ユーザーのリストがあります。そして、私はそれをテンプレートに表示したいと思います:

{%- for user in listed_of_users -%}
        <P>{{ user.name  }}</P>
        {%- endfor -%}  

事前定義された関数「create_link」を使用して、各ユーザーのユーザーのプロファイルへのハイパーリンクリンクを作成したいと思います。この関数は、各オブジェクトのハイパーリンクを返します。だから私は以下のような関数を書きます:

def users_list(users):
    return jinja2.Markup('# '.join(map(create_link, users)) )

次のようなリストが返されます。

User1# User2# User3# User4#... 

そして、私は各ユーザー名の下にハイパーリンクを持っています。

次の構文を使用して、テンプレートに文字列として表示します。

{{ users_list(listed_of_users)}}

ただし、上記の形式のように各ユーザーを表示したいと思います。私は試した:

{%- for user in users_list(listed_of_users) -%}
        <P>{{ user  }}</P>
        {%- endfor -%}

ただし、動作しません。誰かが私がそれを修正するのを手伝ってもらえますか?どうもありがとう!

4

1 に答える 1

0

一つには、あなたの例で'# '.join(map(create_link, users))は、長い文字列を作成するので、あなたがしようとしている方法でそれを繰り返すことはできません。ラムダ式を記述してダブルマップなどを実行することもできますが、手間を省いcreate_linkてテンプレートで関数を使用するcreate_linkと、ハイパーリンクに有効なHTMLが返される場合は、書き込む内容を短くすることができます。

{%- for user in listed_of_users -%}
   <p> {{ user | create_link | safe }} </p>
{%- endfor -%}

これを設定するには、create_linkを。というフィルターとして登録する必要がありますcreate_linkcreate_link関数は1つの値しか受け取らないため、実際には1行のコードを追加するだけで済みます。

environment.filters["create_link"] = create_link

(テンプレートのレンダリングに使用している環境environmentはどこにありますか)。jinja2ボーナスとして、これはあなたがどこでもフィルターを使うことができることを意味します。カスタムフィルターの作成に関するjinja2のドキュメントで詳細を確認できます。

于 2012-08-11T04:35:39.083 に答える