3

文字列のリストを Jinja2 テンプレートに渡しました。リストにJinja2を使用したいjoinのですが、各リスト項目もhref. リンクをテンプレートに渡すことは可能ですか、それともどうにかする必要がありますか?

# I use this to join the list items.

{{ my_list|join(', ') }}

# I use this to make links individually

{% for i in my_list %}

    <a href="/edit/{{ i }}">i</a>

{% endfor %}

結合前/結合時にアイテムをリンクに変換するにはどうすればよいですか?

どんな助けでも素晴らしいでしょう。

4

3 に答える 3

10

loopsのloop特殊変数をfor使用します。

{% for i in my_list %}
    <a href="/edit/{{ i }}">i</a>{% if not loop.last %}, {% endif %}
{% endfor %}

これをマクロでラップすることもできます。

{% macro listlinks(mylist, urltemplate="/edit/%s", connective=", ") -%}
    {% for item in mylist -%}
        <a href="{{ urltemplate|format(item)|e }}">{{ item|e }}</a>
        {% if not loop.last %}{{ connective|e }}{% endif %}
    {%- endfor %}
{%- endmacro %}


{{ listlinks(list_of_ids) }}

ただし、@Demian が彼の回答で示唆しているように、テンプレートにパス名を組み込まないことをお勧めします。たとえば、Pyramid のrequest.route_url()システムのような抽象化されたメカニズムを介して、またはコントローラーからのタプルのみを使用して、テンプレートの外部でパス名を構築することをお勧めします。

于 2012-10-26T20:55:00.973 に答える
0

したがって、Jinja2 だけを使用してこれが可能であるとは思えません。最終的に修正した方法は、Jinja2 に渡す前に、Python でアンカー タグのコンマ区切りリストを作成することでした。次に、Jinja2 に HTML がsafe.

私の Pyramid ビューからこれを返します:

result['list_string'] = ', '.join(['<a href="view/%s">i._name</a>' % i._id\
         for i in objects])
return result

次に、テンプレートで:

{{ list_string|safe }}

正常に動作します。

于 2012-10-18T03:49:27.157 に答える